vertex BFS breadth-first search
s
에서 출발한다.s 의 adj 는 A, B 이니,
먼저, A 가 level 에 있는지 본다.
A가 level 에 없으니 A에 대한 level (level['A']) 를 set 한다.
그 다음 B 가 level 에 있는지 본다.
B도 level 에 없으니 B에 대한 level (level['B']) 를 set 한다.
그리고 방문했던 A, B는 next 에 저장해 놓는다.
그래서 그 다음에 loop 을 돌
frontier
를 만들게 된다.frontier
의 각 adj vertex 들을 접근하면서,각 vertex 가 방문했는지를 level 이 채워져 있는지로 확인한다.
이미 방문한 애들은 그냥 skip 한다.
prarent 는 각 vertex 가 어디서 부터 왔는지를 저장한다. 이것을 거꾸로 하면, path 가 된다.
level = {}
parent = {}
def bfs(s, adj):
level = {"s": 0}
parent = {"s": None}
i = 1
frontier = [s] # level i-1
while frontier:
next = [] # level i
for u in frontier:
for v in adj[u]:
if v not in level:
level[v] = i
parent[v] = u
next.append(v)
frontier = next
i += 1
댓글 없음:
댓글 쓰기