๐Ÿค–/๋ฐฑ์ค€

๋ฐฑ์ค€ 1260: DFS์™€ BFS (Python)

sssbin 2022. 1. 29. 13:38

 

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

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

for i in range(m):
    data = input().split()
    graph[int(data[0])].append(int(data[1]))
    graph[int(data[1])].append(int(data[0]))

for i in range(n+1):
    graph[i].sort()

dfs_visited = [False] * (n+1)
bfs_visited = [False] * (n+1)

def dfs(dfs_visited, v):
    dfs_visited[v] = True
    print(v, end=' ')

    for i in graph[v]:
        if not dfs_visited[i]:
            dfs(dfs_visited, i)

def bfs(bfs_visited, v):
    bfs_visited[v] = True
    queue = deque([v])

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

        for i in graph[q]:
            if not bfs_visited[i]:
                queue.append(i)
                bfs_visited[i] = True

dfs(dfs_visited, v)
print()
bfs(bfs_visited, v)

 

๊ทธ๋ž˜ํ”„ ๋ฒˆํ˜ธ๊ฐ€ 1๋ฒˆ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์ŠคํŠธ ํฌ๊ธฐ๋ฅผ ํŽธํ•˜๊ฒŒ n+1๋กœ ์žก์•˜๋‹ค! (์ธ๋ฑ์Šค 0์€ ๋น„์–ด์žˆ์Œ)

๋…ธ๋“œ๋ฒˆํ˜ธ๋ณ„๋กœ ๊ทธ๋ž˜ํ”„์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ๋„ฃ์–ด์ฃผ๊ณ  ๊ทธ ์•ˆ์—์„œ ์ •๋ ฌํ•œ ๋‹ค์Œ์— ๊ฐ๊ฐ dfs, bfs๋ฅผ ๋Œ๋ ค์ฃผ์—ˆ๋‹ค

์•„๋ฌด๋ฆฌ ๋ด๋„ ํ‹€๋ฆฐ๊ฒŒ ์—†์–ด๋ณด์ด๋Š”๋ฐ ์ž๊พธ ์‹คํŒจํ•ด์„œ ํ™”๋‚˜์„œ ๋ฐฅ ๋จน๊ณ  ์‰ฌ๋‹ค๊ฐ€ ์™”๋Š”๋ฐ

์•Œ๊ณ  ๋ณด๋‹ˆ๊นŒ ๋ฉ์ฒญํ•˜๊ฒŒ ๊ทธ๋ž˜ํ”„ ์ •๋ ฌํ•  ๋•Œ ํฌ๋ฌธ์„ n+1๋กœ ๋Œ๋ ค์•ผ ํ•˜๋Š”๋ฐ n์œผ๋กœ ๋Œ๋ ค์„œ ์ •๋ ฌ์ด ๋‹ค ์•ˆ๋˜์–ด์žˆ์—ˆ์Œ,,

๊ผผ๊ผผํ•˜๊ฒŒ ํ™•์ธํ•ด๋ณด์ž,,