알고리즘

python 백준1260 DFS와 BFS(BOJ1260)

피프밍 2022. 12. 23. 09:42

문제링크 :https://www.acmicpc.net/problem/1260

 

1260번: DFS와 BFS

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

www.acmicpc.net

DFS와 BFS 방법만 알면 풀수있는 문제라서 그리 어렵지는 않았다.

from collections import deque
import sys

input = sys.stdin.readline

#정점n개, 간선m개, 시작점 v
n, m, v = map(int, input().split())

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

for _ in range(m):
  #정점a, 연결된 정점b
  a,b = map(int, input().split())
  graph[a].append(b)
  graph[b].append(a)
for i in range(n+1):
  graph[i].sort()

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

visited = [False] * (n+1)

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

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

그런데 정점 번호가 낮은것부터 방문하기 위해서 나는 그냥 정렬을 한번 더 하고 사용했는데

좀 더 느낌있게 하는 방법이 있을것같다

그리고 visited 리스트를 변수로 넘길때 새로운 객체로 넘겨서 하는 방법도 있을거같은데...

또 출력할때 줄바꿈 하는것도... 알아보자