알고리즘/백준 알고리즘

[백준] 1260번 - DFS와 BFS (Python 파이썬) - 유니개발

유니개발 2022. 11. 17. 23:07

백준 1260번 - DFS와 BFS (Python 파이썬) 풀이

import sys
from collections import deque

def dfs(n): # 깊이우선탐색
    visited[n] = True # n값을 탐색했으니까 true로 바꿈
    print(n, end=' ') # 탐색한 값 출력
    for i in graph[n]: # 줄기? 리스트 값 탐색
        if not visited[i]: # 만약 탐색하지 않은 값이면
            dfs(i) # 재귀
            
def bfs(n): # 너비우선탐색
    queue = deque([n]) # 데크에 n 넣기
    visited[n] = True # n값 탐색해서 true로 바꿈
    while queue : # 데크에 값이 없을 때까지 반복
        v = queue.popleft() # 제일 왼쪽값 pop
        print(v, end = ' ') # pop한 값 출력
        for i in graph[v]: # 리스트 값 돌면서
            if not visited[i]: # 탐색안한 값이면
                queue.append(i) # 데크 오른쪽에 추가
                visited[i] = True # i 값 탐색했으므로 true

n,m,v = map(int, input().split())
graph = [[] for _ in range(n+1)] # 2차원 배열 만들기
for i in range(m):
    a,b = map(int, input().split()) # 간선 입력받기
    graph[a].append(b) # 주어지는 간선이 양방향이므로 2차원 배열로 각 행에 값 추가해주기. a행에 b값 추가, b행에 a값 추가 ㅇㅇ
    graph[b].append(a)
for i in range(1, n+1): # 1부터 n까지
    graph[i].sort() # 오름차순으로 정렬 # 내림차순으로는 sort(reverse=True)로 사용하면 됨
visited = [False] * (n+1) # 탐색했는지를 구분하는 리스트 visited 생성
dfs(v)
print() # 개행
visited = [False] * (n+1) # dfs가 끝나고 나서 다시 리스트값 초기화
bfs(v)