广度优先搜索

广度优先搜索(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
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页