
https://www.acmicpc.net/problem/1260
1260번: DFS와 BFS
첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사
www.acmicpc.net
DFS의 경우 일반적으로 잘 아는 재귀함수를 통한 노드 방문 알고리즘을 생각하면 되지만 개인적으로 큐를 이용하여 BFS를 풀이하는 방식이 특이하다고 생각했다. 해당 알고리즘에 대한 설명과 풀이는 다음 사이트에서 참고하였다
https://velog.io/@falling_star3/%EB%B0%B1%EC%A4%80Python-1260%EB%B2%88-DFS%EC%99%80BFS
[백준][Python] 1260번 DFS와 BFS(DFS/BFS 기본 구현 자세히)
https://www.acmicpc.net/problem/1000두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.입력첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)출력첫째 줄에 A+B를 출력한다.입출력 예
velog.io
문제풀이
#N:정점의 수, M: 간선의 수, V: 탐색 시작 정점
N,M,V = map(int, input().split())
graph = [[0]*(N+1) for _ in range(N+1)]
for i in range(M):
x, y = map(int,input().split())
graph[x][y] = 1
graph[y][x] = 1
#방문 여부의 알고리즘
#visited의 index가 방문한 노드 value는 방문 여부
visited1 = [0]*(N+1)
visited2 = visited1.copy()
#DFS 함수-V는 방문할 노드를 의미
def dfs(V):
#입력 받은 노드를 방문한다
visited1[V] = 1
print(V, end = ' ')
for i in range(1, N+1):#1번부터 N번 노드까지
#만약 탐색하는 정점을 방문한적이 없지만 그래프에는 생성이 되었다면
if graph[V][i] == 1 and visited1[i] == 0:
#해당 노드를 중심으로 다시 탐색해라
dfs(i)
def bfs(V):
queue = [V]
visited2[V] = 1
while queue: #큐가 비어있지 않은 동안
V = queue.pop(0) # 방문한 노드는 제거
print(V, end = ' ')
for i in range(1, N+1):
if(visited2[i] == 0 and graph[V][i] == 1):
queue.append(i)
visited2[i] = 1
dfs(V)
print()
bfs(V)'알고리즘_파이썬' 카테고리의 다른 글
| 백준 1026 보물 (0) | 2024.01.20 |
|---|---|
| 백준 2805 나무 자르기 (0) | 2024.01.20 |
| 백준 10816 숫자카드 2 (0) | 2024.01.19 |
| 백준 10866 덱 (0) | 2024.01.18 |
| 백준 9012 괄호 VPS (0) | 2024.01.13 |