알고리즘/백준 알고리즘
[백준] 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)