广度优先搜索
广度优先搜索解决两个问题:
第一类问题:从节点A出发,有前往节点B的路径吗?
第二类问题:从节点A出发,前往节点B的哪条路径最短?
假设你经营着一个芒果农场,需要寻找芒果销售商,以便将芒果卖给他。在Facebook,你与芒果销售商有联系吗?为此,你可在朋友中查找。这样一来,你不仅在朋友中查找,还在朋友的朋友中查找。别忘了,你的目标是在你的人际关系网中找到一位芒果销售商。因此,如果Alice不是芒果销售商,就将其朋友也加入到名单中。
这意味着你将在她的朋友、朋友的朋友等中查找。使用这种算法将搜遍你的整个人际关系网,直到找到芒果销售商。这就是广度优先搜索算法。
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_seller(name):
return name[-1] =='m'
from collections import deque#这是以个队列
def search(name):
search_queue = deque()
search_queue += graph[name] #将这个人的所有朋友加入到队列里
searched = [] #用来存放以及检查过的人
while(search_queue):
person = search_queue.popleft() #从队列里取出一个人
if person not in searched:
if person_seller(person) :
print("找到了"+person)
return True
else :
search_queue += graph[person]//把这个人的所有朋友加进队列
searched.append(person)
return False
print(search("you"))