[๋ฐฑ์ค€]1260 - Dfs, Bfs

ยท

2 min read

๐Ÿ’ก๋ฌธ์ œ ๋ถ„์„ ์š”์•ฝ

-- ๋ฌธ์ œ --

์ž…๋ ฅ : N(์ •์  ๊ฐœ์ˆ˜), M(๊ฐ„์„  ๊ฐœ์ˆ˜),V(์ •์  ๋ฒˆํ˜ธ)

  • DFS๋กœ ํƒ์ƒ‰ํ•œ ๊ฒฐ๊ณผ์™€ BFS๋กœ ํƒ์ƒ‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ

  • ์ •์  ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ๊ฒƒ์„ ๋จผ์ € ๋ฐฉ๋ฌธ

  • ์ •์  ๋ฒˆํ˜ธ๋Š” 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ

  • ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ด ์—†๋Š” ๊ฒฝ์šฐ ์ข…๋ฃŒ

๐Ÿ’ก์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„

  1. input์„ ํ†ตํ•ด N, M,V ์ž…๋ ฅ

  2. ๋ฐฉ๋ฌธ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ

  3. dfs, bfs ํ•จ์ˆ˜ ์ด์šฉ

๐Ÿ’ก์ฝ”๋“œ

N, M, V = map(int,input().split())
visit=[0]*(N+1)
def dfs(V):
    visit[V]
    print(V, end=' ')

๐Ÿ’ก์‹œ๊ฐ„๋ณต์žก๋„

O(N)

๐Ÿ’กํ‹€๋ฆฐ ์ด์œ 

  1. ์กฐ๊ฑด์„ ํ•œ ๋ฒˆ ๋Œ๊ณ  ๋‚˜์„œ ๊ทธ ๋‹ค์Œ ์š”์†Œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ ํ•ด์•ผํ• ์ง€ ๋ชจ๋ฆ„.

๐Ÿ’กํ‹€๋ฆฐ ๋ถ€๋ถ„ ์ˆ˜์ • or ๋‹ค๋ฅธ ํ’€์ด

N,M,V = map(int,input().split())

#ํ–‰๋ ฌ ๋งŒ๋“ค๊ธฐ
graph = [[0]*(N+1) for _ in range(N+1)]
for i in range (M):
    a,b = map(int,input().split())
    graph[a][b] = graph[b][a] = 1

#๋ฐฉ๋ฌธ ๋ฆฌ์ŠคํŠธ ํ–‰๋ ฌ
visited1 = [0]*(N+1)
visited2 = visited1.copy()

#dfs ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ
def dfs(V):
    visited1[V] = 1 #๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
    print(V, end=' ')
    for i in range(1, N+1):
        if graph[V][i] == 1 and visited1[i] == 0:
            dfs(i)

#bfs ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ
def bfs(V):
    queue = [V]
    visited2[V] = 1 #๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
    while queue:
        V = queue.pop(0) #๋ฐฉ๋ฌธ ๋…ธ๋“œ ์ œ๊ฑฐ
        print(V, end = ' ')
        for i in range(1, N+1):
            if(visited2[i] == 0 and graph[V][i] == 1):
                queue.append(i)
                visited2[i] = 1 # ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ

dfs(V)
print()
bfs(V)

๐Ÿ’ก๋Š๋‚€์  or ๊ธฐ์–ต ํ•  ์ •๋ณด

  1. ์ฒ˜์Œ ์ฝ”ํ…Œ๋ฅผ ์ ‘ํ•˜๋‹ค๋ณด๋‹ˆ ์ ‘๊ทผํ•˜๋Š”๋ฐ ์–ด๋ ค์›€์„ ๋Š๋‚Œ. -> ๋ฌธ์ œ ๋งŽ์ด ์ ‘ํ•ด๋ณด๊ธฐ.

  2. ๊ฐœ๋…๋งŒ ๊ณต๋ถ€ํ•˜์ง€ ๋ง๊ณ  ๊ธฐ๋ณธ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ ๋งŽ์ด ์ ‘ํ•ด๋ณด๊ธฐ.

  3. ํ–‰๋ ฌ ๋งŒ๋“ค ๋•Œ ์ฃผ๋กœ ์“ฐ๋Š” ๋ฆฌ์ŠคํŠธ ์ปดํ”„๋ฆฌํ—จ์…˜ ๋ฌธ๋ฒ• ๊ธฐ์–ตํ•˜๊ธฐ.

  4. 40๋ถ„ ์ด์ƒ ๊ณ ๋ฏผํ•ด๋ณด๊ณ  ์ฝ”๋“œ ์•ˆ๋‚˜์˜ค๋ฉด ๋จผ์ € ํ’€์ด ํ™•์ธํ•˜๊ณ  ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ.

  5. ์ต์ˆ™ํ•ด์งˆ ๋•Œ ๊นŒ์ง€ ๋” ๊ผญ ํ’€์–ด๋ณด๊ธฐ.

ย