https://www.acmicpc.net/problem/1260
1260번: DFS와 BFS
첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사
www.acmicpc.net
💡 정점번호가 작은 것부터 방문해야해서 for문을 사용한다. 1부터 시작해 확인하기 위해서.
DFS는 해당 정점에서 다시 시작하기 때문에 재귀도 사용해야 한다.
BFS는 재귀를 사용하지 않기 때문에 함수 안에서 visited를 초기화했다.
그리고 BFS는 queue가 empty일 때까지 사용되므로 while문을 사용해서 queue가 빌 때까지 반복한다.
✔ 소스코드
N,M,V=map(int,input().split())
graph=[[0]*(N+1) for i in range(N+1)]
visited=[False]*(N+1)
for i in range(M):
a, b = map(int, input().split())
graph[a][b]=1
graph[b][a]=1
def dfs(V):
print(V,end=' ')
visited[V]=True
for i in range(1,N+1):
if visited[i]==False and graph[V][i]==1:
dfs(i)
def bfs(V):
visited=[False]*(N+1)
queue=[V]
while(queue):
visited[V]=True
V=queue[0]
print(V,end=' ')
del queue[0]
for i in range(1,N+1):
if visited[i]==False and graph[V][i]==1:
queue.append(i)
visited[i]=True
dfs(V)
print()
bfs(V)
'백준문제풀이' 카테고리의 다른 글
[백준 문제풀이] 2667번 : 단지번호붙이기 (0) | 2021.08.29 |
---|---|
[백준 문제풀이] 11724번 : 연결 요소의 개수 (0) | 2021.08.28 |
[백준 문제풀이] 13023번 : ABCDE (0) | 2021.08.24 |
[백준 문제풀이] 1182번 : 부분수열의 합 (0) | 2021.08.22 |
[백준 문제풀이] 11723번 : 집합 (0) | 2021.08.21 |