python 广度遍历
from collections import deque
graph = {}
graph["you"] = ["alice", "bob", "claire"]
graph["bob"] = ["anuj", "peggy"]
graph["alice"] = ["peggy"]
graph["claire"] = ["thom", "jonny"]
graph["anuj"] = []
graph["peggy"] = []
graph["thom"] = []
graph["jonny"] = []
def person_is_seller(name):
return name[-1] == 'm'
def search(name):
search_queue = deque()
search_queue += graph[name]
searched = [] ##←------------------------------这个数组用于记录检查过的人
while search_queue:
person = search_queue.popleft()
print("person: ", person)
if person not in searched: ## ←----------仅当这个人没检查过时才检查
if person_is_seller(person):
print(person + " is a mango seller!")
return True
else:
search_queue += graph[person]
searched.append(person) ##←------将这个人标记为检查过
return False
if __name__ == '__main__':
bResult = search("you")
print("查找结果", bResult)
心得
广度遍历是用于搜索A->B是否有路径,且查找出来的是最短路径
需要按顺序加入需遍历的节点,否则就不是最短的了
需要对检查过的进行标记,防止进入死循环