출처:https://www.fun-coding.org/Chapter18-dfs-live.html
BFS : 너비 우선 탐색
정점들과 같은 레벨에 있는 노드들을 먼저 탐색하는 방식이다.
시간복잡도 :
노드수:V
간선수:E
O(V+E)
graph=dict()
graph['A']=['B','C']
graph['B']=['A','D']
graph['C']=['A','G','H','I']
graph['D']=['B','E','F']
graph['E']=['D']
graph['F']=['D']
graph['G']=['C']
graph['H']=['C']
graph['I']=['C','J']
graph['J']=['I']
BFS의 알고리즘 표현
2개의 큐를 활용한다.
def bfs( 딕셔너리, 처음원소)
큐2개 선언
시작노드 need_visit에 넣고 시작하기
while need_visit이 빌때까지
첫원소를 빼낸다.(왼쪽에서 빼내기)
그원소가 visited에 없으면
append후
need_visit의 오른쪽에 원소 넣기.
BFS도 마찬가지로 extend( reversed( graph[node]) ) 로 바꾸면 후위순회로 변경된다.
def bfs( graph , start):
need_visit=[start]
visited=[]
while need_visit:
node=need_visit.pop(0)
if node not in visited:
visited.append(node)
need_visit.extend(graph[node])
return visited
graph=dict()
graph['A']=['B','C']
graph['B']=['A','D']
graph['C']=['A','G','H','I']
graph['D']=['B','E','F']
graph['E']=['D']
graph['F']=['D']
graph['G']=['C']
graph['H']=['C']
graph['I']=['C','J']
graph['J']=['I']
print (bfs(graph,'A') )
'코딩테스트 파이썬 > 탐색' 카테고리의 다른 글
16173 점프왕 쩰리 파이썬(재시도 -0) (0) | 2021.08.02 |
---|---|
1388 바닥장식 (재시도 0) (0) | 2021.07.30 |
최단경로 - 다익스트라 (0) | 2021.07.28 |
DFS 깊이 우선 탐색 파이썬 (0) | 2021.07.27 |
이진 탐색 (0) | 2021.07.26 |