麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

Python實現(xiàn)Dijkstra算法

2020-02-15 23:15:58
字體:
供稿:網(wǎng)友

Dijkstra算法

迪杰斯特拉算法是由荷蘭計算機科學(xué)家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是從一個頂點到其余各頂點的最短路徑算法,解決的是有向圖中最短路徑問題。迪杰斯特拉算法主要特點是以起始點為中心向外層層擴展,直到擴展到終點為止。

迪杰斯特拉算法是求從某一個起點到其余所有結(jié)點的最短路徑,是一對多的映射關(guān)系,是一種貪婪算法

示例:

算法

算法實現(xiàn)流程思路:
迪杰斯特拉算法每次只找離起點最近的一個結(jié)點,并將之并入已經(jīng)訪問過結(jié)點的集合(以防重復(fù)訪問,陷入死循環(huán)),然后將剛找到的最短路徑的結(jié)點作為中間結(jié)點來更新相鄰結(jié)點的路徑長度,這樣循環(huán)找到圖中一個個結(jié)點的最短路徑。

"""輸入graph 輸入的圖src 原點返回dis 記錄源點到其他點的最短距離path 路徑"""import jsondef dijkstra(graph,src):  if graph ==None:    return None  # 定點集合  nodes = [i for i in range(len(graph))] # 獲取頂點列表,用鄰接矩陣存儲圖  # 頂點是否被訪問  visited = []  visited.append(src)  # 初始化dis  dis = {src:0}# 源點到自身的距離為0  for i in nodes:    dis[i] = graph[src][i]  path={src:{src:[]}} # 記錄源節(jié)點到每個節(jié)點的路徑  k=pre=src  while nodes:    temp_k = k    mid_distance=float('inf') # 設(shè)置中間距離無窮大    for v in visited:      for d in nodes:        if graph[src][v] != float('inf') and graph[v][d] != float('inf'):# 有邊          new_distance = graph[src][v]+graph[v][d]          if new_distance <= mid_distance:            mid_distance=new_distance            graph[src][d]=new_distance # 進行距離更新            k=d            pre=v    if k!=src and temp_k==k:      break    dis[k]=mid_distance # 最短路徑    path[src][k]=[i for i in path[src][pre]]    path[src][k].append(k)    visited.append(k)    nodes.remove(k)    print(nodes)  return dis,pathif __name__ == '__main__':  # 輸入的有向圖,有邊存儲的就是邊的權(quán)值,無邊就是float('inf'),頂點到自身就是0  graph = [     [0, float('inf'), 10, float('inf'), 30, 100],    [float('inf'), 0, 5, float('inf'), float('inf'), float('inf')],    [float('inf'), float('inf'), 0, 50, float('inf'), float('inf')],    [float('inf'), float('inf'), float('inf'), 0, float('inf'), 10],    [float('inf'), float('inf'), float('inf'), 20, 0, 60],    [float('inf'), float('inf'), float('inf'), float('inf'), float('inf'), 0]]  dis,path= dijkstra(graph, 0) # 查找從源點0開始帶其他節(jié)點的最短路徑  print(dis)  print(json.dumps(path, indent=4))

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對武林站長站的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产99精品 | 国产成人aⅴ | 日本一区二区视频在线观看 | 精品视频 久久久 | 久久精品女人天堂av | 毛片免费观看视频 | 中国漂亮护士一级a毛片 | 中文字幕亚洲视频 | 久久人人人 | 成年人视频在线免费播放 | 亚洲嫩草av | 免费毛片随便看 | 日韩精品无码一区二区三区 | 一区二区精品视频 | 黄色毛片a级 | 亚洲一区在线免费视频 | 午夜a狂野欧美一区二区 | 国产免费传媒av片在线 | 国产精品一区二区三区99 | 91精品国产综合久久婷婷香 | 久久老司机精品视频 | 欧美成网站 | 精品免费国产一区二区三区 | 一区二区久久精品66国产精品 | 羞羞网站视频 | 欧美不卡三区 | 操你啦免费视频 | 日韩视频一区二区 | 亚洲国产网站 | 国产大片全部免费看 | 中国免费黄色 | 国产精品久久久久久久久久久天堂 | 操嫩草 | 一级片免费在线 | 欧美中文字幕一区二区三区亚洲 | 视频一区二区三区在线播放 | 久久久久国产精品久久久久 | 国产亚洲黑人性受xxxx精品 | 久久性生活免费视频 | 免费观看视频在线 | 亚洲天堂在线电影 |