알고리즘
python 백준1260 DFS와 BFS(BOJ1260)
피프밍
2022. 12. 23. 09:42
문제링크 :https://www.acmicpc.net/problem/1260
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 리스트를 변수로 넘길때 새로운 객체로 넘겨서 하는 방법도 있을거같은데...
또 출력할때 줄바꿈 하는것도... 알아보자