Algorithm

[๋ฐฑ์ค€] 1260. dfs์™€ bfs python

๐Ÿณ ๋งํฌ

๋ฐฑ์ค€ dfs์™€ bfs

๐Ÿ• ๋ฌธ์ œ

๊ทธ๋ž˜ํ”„๋ฅผ DFS๋กœ ํƒ์ƒ‰ํ•œ ๊ฒฐ๊ณผ์™€ BFS๋กœ ํƒ์ƒ‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋‹จ, ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ์—๋Š” ์ •์  ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ๊ฒƒ์„ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๊ณ , ๋” ์ด์ƒ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ด ์—†๋Š” ๊ฒฝ์šฐ ์ข…๋ฃŒํ•œ๋‹ค. ์ •์  ๋ฒˆํ˜ธ๋Š” 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€์ด๋‹ค.

๐Ÿพ ํ’€์ด ๋ฐฉ๋ฒ•

dfs์™€ bfs๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™๋‹ค.
๋ฐฉ๋ฒ•์€ ๋น„์Šทํ•˜์ง€๋งŒ, dfs๋Š” graph์˜ ๊ฐ’์ด 1์ธ ๊ฒฝ์šฐ์— ์ž์‹ ๋…ธ๋“œ๋กœ ํ–ฅํ•˜๊ธฐ ์œ„ํ•ด ์žฌ๊ท€๋ฅผ ์ด์šฉํ•˜๊ณ , bfs๋Š” graph์˜ ๊ฐ’์ด 1์ธ ๊ฒฝ์šฐ์—๋Š” ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋˜ ๋‹ค๋ฅธ ํ˜•์ œ๋…ธ๋“œ์—์„œ 1์ธ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

์ฆ‰, dfs๋Š” ๋” ๊นŠ์ด bfs๋Š” ๋” ๋„“๊ฒŒ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ข‹์„ ๋“ฏ.

dfs์™€ bfs
[๊ทธ๋ฆผ ์ถœ์ฒ˜ : https://namu.wiki]

์†Œ์Šค์ฝ”๋“œ

import sys, collections
sys.setrecursionlimit(10 ** 5)
sys.stdin = open("input.txt","rt")

def dfs(x):
    visit[x] = 1
    print(x+1, end=' ')
    for i in range(n):
        if graph[x][i] == 1 and visit[i] == 0 :
            dfs(i)
    return

def bfs(x):
    q = collections.deque()
    q.append(x)

    while q:
        i = q.popleft()
        print(i+1, end= ' ')
        for j in range(n):
            if graph[i][j] == 1 and visit[j] == 0:
                visit[j] = 1
                q.append(j)
    return


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

graph = [[0] * n for _ in range(n)]
for _ in range(m):
    a, b = map(int,sys.stdin.readline().split())
    a, b = a-1, b-1
    graph[a][b] = 1
    graph[b][a] = 1

# dfs
visit = [0] * n
dfs(v)
print()

# bfs
visit = [0] * n
visit[v] = 1
bfs(v)