Algorithm

[BaekJoon] 백준 알고리즘 1260번 / DFS와 BFS / Python

bkuk 2023. 3. 3. 14:46

 

import sys
sys.stdin = open( "input.txt", "r")

def dfs(c):

    # 방문정보
    v[c] = 1
    # 방문기록
    ans_dfs.append(c)

    # 다음 방문지
    for i in adj[c]:
        if v[i] == 0:
            dfs(i)

def bfs(s):
    # 필요한 q, v[], 변수 생성
    q = []

    # Q에 초기데이터 삽입
    q.append(s)
    ans_bfs.append(s)
    v[s] = 1

    while q:
        c = q.pop(0)
        for n in adj[c]:
            if v[n] == 0:
                # q 삽입
                q.append(n)
                # 방문정보
                v[n] = 1
                # 방문기록
                ans_bfs.append(n)


# 정점 N과 간선 M의 개수, 시작 정점 번호 V
N,M,V = map( int, input().split() )
# 인접 리스트 생성
adj = [[] for _ in range(N+1) ]
# 인접리스트 채우기
for _ in range(M):
    s, e = map( int, input().split() )
    # 양방향
    adj[s].append(e)
    adj[e].append(s)

# 오름차순 정렬
for i in range( 1, N+1 ):
    adj[i].sort()

# dfs 방문정보, 방문기록
v = [0] * ( N + 1)
ans_dfs = []
dfs(V)

# bfd 방문정보, 방문기록
v = [0] * ( N + 1)
ans_bfs = []
bfs(V)

print( *ans_dfs )
print( *ans_bfs )