반응형
개념
2021.03.07 - [Algorithm & Data structure] - [알고리즘] DFS와 BFS (깊이 우선탐색과 너비 우선탐색)
[알고리즘] DFS와 BFS (깊이 우선탐색과 너비 우선탐색)
DFS (깊이 우선탐색) 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘 스택 자료구조( or 재귀함수)를 이용한다 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다. 스택의 최상단 노드에
seongbindb.tistory.com
스케치
코드
import sys
from collections import deque
def bfs(graph,start, visited_bfs):
q = deque([start]) # 1
visited_bfs[start] = True
while q:
v = q.popleft()
print(v, end=' ')
for x in graph[v]:
if not visited_bfs[x]: # 아직 방문하지 않았다면
q.append(x)
visited_bfs[x] = True
def dfs(graph,v, visited_dfs):
visited_dfs[v] = True
print(v, end=' ')
for x in graph[v]:
if not visited_dfs[x]:
dfs(graph, x, visited_dfs)
global n
n,m,v = map(int,sys.stdin.readline().rstrip().split())
graph = [
[] for _ in range(n+1)
]
visited_dfs = [False] * (n+1)
visited_bfs = [False] * (n+1)
for _ in range(m):
x, y = map(int,sys.stdin.readline().rstrip().split())
graph[x].append(y)
graph[y].append(x)
for i in range(len(graph)):
graph[i].sort() # 입력 되는 연결 정보가 오름차순으로 정리가 안되있어서 탐색은 되지만 출력에 문제가 있다.
# 그래서 sort 가 필요하다.
dfs(graph,v,visited_dfs)
print()
bfs(graph,v,visited_bfs)
'코딩테스트 > 파이썬' 카테고리의 다른 글
[백준] 색종이 만들기 2630 (파이썬) (0) | 2021.03.15 |
---|---|
[백준] [정렬] 통계학 2108 (파이썬) (0) | 2021.03.14 |
[백준] [큐,덱] 큐2 18258 (파이썬) (0) | 2021.03.14 |
[백준] [스택] 제로 10773 (파이썬) (시간 초과 방지 코드) (0) | 2021.03.14 |
[백준] [조합] 다리놓기 1010 (파이썬) (0) | 2021.03.14 |