IT/백준
[백준] 1260 DFS와 BFS(Python)
ziasu
2021. 10. 12. 14:32
반응형
1. 생각 정리
- 처음에 간선 정보 입력을 2차원 리스트에 [[1,2], [1,3]]이런 식으로 담으려 했는데 문제를 더 간단히 풀기 위해서는 빈 2차원 리스트를 생성한 뒤 1행에 1과 연결된 정점 넣어주기, 2행에 2와 연결된 정점 넣어주기... 의 느낌으로 입력받는 게 더 편함
- visited 리스트를 따로 만들어서 이미 탐색된 정점에 대한 정보를 관리
- DFS의 경우에는 재귀함수로, BFS의 경우에는 deque를 이용하여 구현
2. 코드 구현
from collections import deque
#정점 개수 N, 간선 개수 M, 탐색 시작 정점번호 V
N, M, V = map(int, input().split())
mapp = [[] for _ in range(N+1)]
#두개의 정점이 연결되어있다는 간선정보
for _ in range(M):
x, y = map(int, input().split())
mapp[x].append(y)
mapp[y].append(x)
for i in mapp:
i.sort()
def dfs(V):
print(V, end=' ')
visited[V] = True
for i in mapp[V]:
if visited[i] == False:
dfs(i)
def bfs(V):
q = deque([V])
while q:
temp = q.popleft()
if not visited[temp]:
visited[temp] = True
print(temp, end=' ')
for i in mapp[temp]:
if not visited[i]:
q.append(i)
visited = [False]*(N+1)
dfs(V)
print()
visited = [False]*(N+1)
bfs(V)
반응형