广度优先搜索(BFS)让你能找出图中是否有从一个点到另一个点的路径,如果有,广度优先搜索将找出最短路径,图由节点和边组成,一个节点能与众多节点相连,这些节点被称为邻居。
图分为有向图和无向图,有向图的边为箭头,箭头的方向指定了关系的方向,无向图中的边不带箭头,其中的关系是双向的。
图由多个节点组成,一个节点与多个节点相连,用散列表很容易表示这种关系。
你需要按照加入顺序检查搜索列表的,否则找到的就不是最短路径;对于检查过的节点,务必不要再去检查;广度优先搜索的时间复杂度为O(V+E),其中V为节点数,E为边数。
import collections
def search(graph, e1, e2):
searchQueue=collections.deque()
searchQueue+=graph[e1];
searched=[]
while searchQueue:
e=searchQueue.popleft()
if e not in searched:
if e==e2:
return True
else:
searchQueue+=graph[e]
searched.append(e)
return False
graph={}
graph["a"]=["b","d"]
graph["b"]=[]
graph["d"]=["i"]
graph["i"]=["m"]
graph["m"]=[]
print(search(graph,"a","m"))#True
print(search(graph,"b","m"))#False