ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

Programming/๋ฐฑ์ค€

230219 [1260: DFS&BFS]

ํ•ด๋“œ์œ„๊ทธ 2023. 9. 2. 17:00

True → 1, False → 0 ๋กœ ๊ตฌํ˜„

 

import sys
from collections import deque

input = sys.stdin.readline

# N : ์ •์ ๊ฐœ์ˆ˜, M : ๊ฐ„์„ ๊ฐœ์ˆ˜, V : ํƒ์ƒ‰์‹œ์ž‘์ 
N, M, V = map(int, input().rstrip().split())

# ์ธ์ ‘ํ–‰๋ ฌ์„ ๋ชจ๋‘ 0์œผ๋กœ ๊ตฌ์„ฑ
matrix = [[0]*(N+1) for i in range(N+1)]

#๋ฐฉ๋ฌธํ•  ๊ณณ ์ฒดํฌ ๋ฆฌ์ŠคํŠธ ์ •์  ๊ฐฏ์ˆ˜๋งŒํผ ํฌ๊ธฐ ๊ตฌ์„ฑ
visited_dfs = [0]*(N+1)
visited_bfs = [0]*(N+1)

# ๊ฐ„์„  ๊ฐฏ์ˆ˜ ๋งŒํผ ์ž…๋ ฅ๋ฐ›๊ธฐ, ์ž…๋ ฅ๋ฐ›๋Š” ๊ฐ’์— ๋Œ€ํ•ด ์˜ํ–‰๋ ฌ์— 1 ์‚ฝ์ž… -> ์ธ์ ‘๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
for i in range(M):
    n1, n2 = map(int, input().rstrip().split())
    matrix[n1][n2] = matrix[n2][n1] = 1

def DFS(V):
    visited_dfs[V] = 1 # V๊ฐ’ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
    print(V, end= ' ')

    for i in range(1, N+1):
				# i๊ฐ’์„ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๊ณ  V์™€ ์—ฐ๊ฒฐ์ด ๋˜์–ด์ž‡๋‹ค๋ฉด
        if(visited_dfs[i] == 0 and matrix[V][i] == 1):
						# ํ•ด๋‹น i๊ฐ’์œผ๋กœ ๊นŠ์ด ํƒ์ƒ‰
            DFS(i)

def BFS(V):
    visited_bfs[V] = 1 # V๊ฐ’ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
    queue = deque([V])

    while queue: #q๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€
        V = queue.popleft() # ํ์— ์žˆ๋Š” ์ฒซ๋ฒˆ์งธ ๊ฐ’ ๊บผ๋‚ด๊ธฐ
        print(V, end = ' ')

        for i in range(1, N+1): #1๋ถ€ํ„ฐ N๊นŒ์ง€ ๋”
						# ๋งŒ์•ฝ i๊ฐ’์„ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๊ณ , V์™€ ์—ฐ๊ฒฐ์ด ๋˜์–ด์žˆ๋‹ค๋ฉด
						# ๊ทธ i๊ฐ’ ์ถ”๊ฐ€ & ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
            if(visited_bfs[i] == 0 and matrix[V][i] == 1):
                queue.append(i)
                visited_bfs[i] = 1

DFS(V)
print()
BFS(V)
๋ฐ˜์‘ํ˜•