알고리즘
[백준 알고리즘] 1260번 DFS와 BFS. 파이썬(python)
삶은겨란
2022. 4. 28. 17:01
import queue
n,m,v=map(int,input().split())
# 인접행렬(adjacency matrix)
# 그래프에서 어느 노드들끼리 연결되었는지 나타내는 이차원 행렬
graph=[[0]*(n+1) for _ in range(n+1)]
for _ in range(m):
x,y=list(map(int,input().split()))
# 양방향 그래프
graph[x][y]=graph[y][x]=1
# 방문 리스트(True/False or 0/1)
dfs_visited, bfs_visited= [False]*(n+1),[False]*(n+1)
# DFS-스택
def dfs(v):
dfs_visited[v]=True # 정점 v에 대해 방문처리
print(v, end=' ') # 띄어쓰기 단위로 출력
for i in range(1,n+1):
if graph[v][i]==1 and dfs_visited[i]==False: # 해당 정점에 연결된 정점이면서 아직 방문을 안했으면
dfs(i)
# BFS-큐
def bfs(v):
queue=[v] # 현재 방문중인 정점를 큐에 넣는다
bfs_visited[v]=True # 현재 정점를 방문 처리한다
while queue:
v=queue.pop(0) # 방문한 정점 제거
print(v,end=' ') # 정점 제거하면서 출력
for i in range(1,n+1):
# 해당 정점에 연결된 정점이면서 아직 방문을 안했으면
if graph[v][i]==1 and bfs_visited[i]==False:
queue.append(i) # 정점을 큐에 넣는다
bfs_visited[i]=True # 방문처리
dfs(v)
print()
bfs(v)