Development/CodingTest
[백준] Python DFS와 BFS
Kirok Kim
2021. 12. 30. 20:58
전체 코드
from collections import deque
N, M, V=map(int,input().split())
matrix=[[0]*(N+1) for i in range(N+1)]
visited=[False]*(N+1)
for i in range(M):
x,y=map(int,input().split())
matrix[x][y]=matrix[y][x]=1
def dfs(matrix,V,visited):
visited[V]=True
print(V,end=' ')
for i in range(1,N+1):
if not visited[i]and matrix[V][i]==1:
dfs(matrix,i,visited)
def bfs(matrix,V,visited):
queue=deque([V])
visited[V]=False
while queue:
V=queue.popleft()
print(V,end=' ')
for i in range(1,N+1):
if visited[i] and matrix[V][i]==1:
queue.append(i)
visited[i]=False
dfs(matrix,V,visited)
print()
bfs(matrix,V,visited)
입력값 받기
N, M, V=map(int,input().split())
# map 함수를 적용하여 map 함수 내 왼쪽 항에 있는 함수(int)를 map 함수내 우측 항에 적용하여 좌항에 대입한다.
matrix=[[0]*(N+1) for i in range(N+1)]
# 행렬
visited=[False]*(N+1)
# 지나간 자리 확인
for i in range(M):
x,y=map(int,input().split())
matrix[x][y]=matrix[y][x]=1
# 양 방향 edge 설정
dfs
def dfs(matrix,V,visited):
visited[V]=True
# 지나간 자리 체크
print(V,end=' ')
for i in range(1,N+1):
if not visited[i]and matrix[V][i]==1:
# 지나가지 않고 node간의 edge가 있으면
dfs(matrix,i,visited)
# 재귀함수
bfs
def bfs(matrix,V,visited):
queue=deque([V])
visited[V]=False
# 이미 True로 변경이 됐으니 False로 체크
while queue:
V=queue.popleft()
# 제일 안쪽에 있는 큐 pop
print(V,end=' ')
for i in range(1,N+1):
if visited[i] and matrix[V][i]==1:
queue.append(i)
visited[i]=False
dfs(matrix,V,visited)
print()
bfs(matrix,V,visited)
# 출력
반응형