BOJ/Python

백준 1260번 DFS와 BFS 파이썬

띵지니어 2022. 2. 3. 21:15

https://www.acmicpc.net/problem/1260

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

 

from collections import deque
import sys

def bfs(graph, v, visited):
  q = deque([v])       
  visited[v] = True   
  while q:
    v = q.popleft()
    print(v, end = " ")
    for i in graph[v]:
        if not visited[i]:
            q.append(i)
            visited[i] = True

def dfs(graph, v, visited):
  visited[v] = True        
  print(v, end = " ")
  for i in graph[v]:
    if not visited[i]:
        dfs(graph, i, visited)

n, m, v = map(int, sys.stdin.readline().split())

visited = [False] * (n + 1)

graph = [[] for _ in range(n + 1)]

for _ in range(m):      # 2차원 배열로 연결정보 입력 
  a, b = map(int, sys.stdin.readline().split())
  graph[a].append(b)
  graph[b].append(a)
 
for i in range(1, n+1): # 각각 정렬
    graph[i].sort()

dfs(graph, v, visited)
print()

visited = [False] * (n + 1)
bfs(graph, v, visited)

 

2차원 배열로 연결정보를 입력하는 부분에서 고민을 많이 하였다.


graph[a].append(b)
graph[b].append(a)

바로 이 부분인데

공부하다 보니 저 부분은 많이 쓰이는 알고리즘이므로 잘 알아둬야겠다..