백준 1260번 (실버 2) : DFS와 BFS

2021. 8. 9. 16:22문제풀기/백준

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

 

1260번: DFS와 BFS

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

www.acmicpc.net

- 단순히 BFS, DFS를 구현할 수 있으면 된다.

- 중요한 것은 간선이 여러개면 작은 정점부터 방문하기 때문에, DFS, BFS를 실행하기 전에 sort를 한번 해줘야 한다는 점이다.

import sys
from collections import deque

n,m,v = map(int, sys.stdin.readline().rstrip().split())
graph = [[] for _ in range(n+1)]

for _ in range(m):
    x,y = map(int,sys.stdin.readline().rstrip().split())

    graph[y].append(x)
    graph[x].append(y)

for i in range(n+1):
    graph[i].sort()
    
visited = [0] * (n+1)
visited[v] = 1
def dfs(now,graph,visited):
    print(now,end=' ')
    for i in graph[now]:
        if visited[i] == 0:
            visited[i] = 1
            dfs(i,graph,visited)

dfs(v,graph,visited)

print()

visited = [0]* (n+1)
visited[v] = 1
def bfs(v,graph,visited):
    queue = deque([v])

    while queue:
        now = queue.popleft()
        print(now, end = ' ')

        for i in graph[now]:
            if visited[i] == 0:
                visited[i] = 1
                queue.append(i)

bfs(v,graph,visited)