1. 程式人生 > >【BFS】【DFS】【最短路徑】

【BFS】【DFS】【最短路徑】


def BFS(garph,s):
    '''

    :param garph:圖
    :param s: 開始的節點
    :return:
    '''
    queue =[]#存放所有的順序
    queue.append(s)
    seen=set()

    seen.add(s)
    while (len(queue)>0):
        vertex =queue.pop(0)
        nodes = graph[vertex]
        for w in nodes:
            if w not in seen:
                queue.append(w)
                seen.add(w)
        print(vertex)

def
DFS(garph,s):
''' :param garph:圖 :param s: 開始的節點 :return: ''' queue =[]#存放所有的順序 queue.append(s) seen=set() seen.add(s) while (len(queue)>0): vertex =queue.pop() nodes = graph[vertex] for w in nodes: if w not in seen: queue.append(w) seen.add(w) print(vertex) def
findleastroad(graph,s):
''' :param garph:圖 :param s: 開始的節點 :return: ''' queue = [] # 存放所有的順序 queue.append(s) seen = set() seen.add(s) parent={s:None}#s的前一個點是空 while (len(queue) > 0): vertex = queue.pop(0) nodes = graph[vertex] for
w in nodes: if w not in seen: queue.append(w) seen.add(w) parent[w]=vertex #print(vertex) return parent if __name__=='__main__': graph = { # 通過一個點找到所有的相鄰點 "A": ['B', 'C'], "B": ['A', 'C', 'D'], "C": ['A', 'B', 'D', 'E'], "D": ['B', 'C', 'E', 'F'], "E": ['C','D'], 'F': ['D'] } print('BFS結果:') BFS(graph,'A') print('DFS結果:') DFS(graph,'A') print('最短路徑') parent=findleastroad(graph,'E') for key in parent: print(key,parent[key])#打印出每一個節點的前一個點 v='B' while v!=None: print(v) v=parent[v]