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)
# 출력
반응형