欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)Dijkstra算法

 更新時(shí)間:2018年10月17日 10:49:24   作者:no-96  
今天小編就為大家分享一篇關(guān)于Python實(shí)現(xiàn)Dijkstra算法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

Dijkstra算法

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

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

示例:

算法

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

"""
輸入
graph 輸入的圖
src 原點(diǎn)
返回
dis 記錄源點(diǎn)到其他點(diǎn)的最短距離
path 路徑
"""
import json
def dijkstra(graph,src):
  if graph ==None:
    return None
  # 定點(diǎn)集合
  nodes = [i for i in range(len(graph))] # 獲取頂點(diǎn)列表,用鄰接矩陣存儲(chǔ)圖
  # 頂點(diǎn)是否被訪問(wèn)
  visited = []
  visited.append(src)
  # 初始化dis
  dis = {src:0}# 源點(diǎn)到自身的距離為0
  for i in nodes:
    dis[i] = graph[src][i]
  path={src:{src:[]}} # 記錄源節(jié)點(diǎn)到每個(gè)節(jié)點(diǎn)的路徑
  k=pre=src
  while nodes:
    temp_k = k
    mid_distance=float('inf') # 設(shè)置中間距離無(wú)窮大
    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 # 進(jìn)行距離更新
            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,path
if __name__ == '__main__':
  # 輸入的有向圖,有邊存儲(chǔ)的就是邊的權(quán)值,無(wú)邊就是float('inf'),頂點(diǎn)到自身就是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) # 查找從源點(diǎn)0開(kāi)始帶其他節(jié)點(diǎn)的最短路徑
  print(dis)
  print(json.dumps(path, indent=4))


總結(jié)

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

相關(guān)文章

  • Python Tkinter Menu組件詳解

    Python Tkinter Menu組件詳解

    這篇文章主要介紹了Python TkinterMenu 組件用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-10-10
  • 使用Python來(lái)批量檢測(cè)并刪除Word文檔中的宏

    使用Python來(lái)批量檢測(cè)并刪除Word文檔中的宏

    Word文檔作為最常用的電子文檔格式之一,經(jīng)常被用來(lái)作為內(nèi)容分享工具,在網(wǎng)絡(luò)中或設(shè)備之間進(jìn)行傳輸,其安全性也需要受到關(guān)注,宏是可嵌入Word文檔中的一種VBA迷你程序,本文將介紹如何使用Python來(lái)批量檢測(cè)并刪除Word文檔中的宏,保護(hù)計(jì)算機(jī)的安全,需要的朋友可以參考下
    2024-07-07
  • pygame可視化幸運(yùn)大轉(zhuǎn)盤(pán)實(shí)現(xiàn)

    pygame可視化幸運(yùn)大轉(zhuǎn)盤(pán)實(shí)現(xiàn)

    這篇文章主要介紹了pygame可視化幸運(yùn)大轉(zhuǎn)盤(pán)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Python實(shí)現(xiàn)求取表格文件某個(gè)區(qū)域內(nèi)單元格的最大值

    Python實(shí)現(xiàn)求取表格文件某個(gè)區(qū)域內(nèi)單元格的最大值

    這篇文章主要介紹基于Python語(yǔ)言,基于Excel表格文件內(nèi)某一列的數(shù)據(jù),計(jì)算這一列數(shù)據(jù)在每一個(gè)指定數(shù)量的行的范圍內(nèi)(例如每一個(gè)4行的范圍內(nèi))的區(qū)間最大值的方法,需要的朋友可以參考下
    2023-08-08
  • opencv?canny邊緣檢測(cè)算法詳解

    opencv?canny邊緣檢測(cè)算法詳解

    本文主要介紹了opencv?canny邊緣檢測(cè)算法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Python3.6+selenium2.53.6自動(dòng)化測(cè)試_讀取excel文件的方法

    Python3.6+selenium2.53.6自動(dòng)化測(cè)試_讀取excel文件的方法

    這篇文章主要介紹了Python3.6+selenium2.53.6自動(dòng)化測(cè)試_讀取excel文件的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Flask中提供靜態(tài)文件的實(shí)例講解

    Flask中提供靜態(tài)文件的實(shí)例講解

    在本篇文章里小編給大家分享的是一篇關(guān)于Flask中提供靜態(tài)文件的實(shí)例及相關(guān)知識(shí)點(diǎn)詳解,有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-12-12
  • python基礎(chǔ)之reverse和reversed函數(shù)的介紹及使用

    python基礎(chǔ)之reverse和reversed函數(shù)的介紹及使用

    我們?cè)谡碣Y料的時(shí)候,有的時(shí)候過(guò)于混亂難以整理,這時(shí)我們不妨可以對(duì)它先進(jìn)行一個(gè)排序,這樣可以方便我們?yōu)g覽,查詢,有利于我們整理資料,下面這篇文章主要給大家介紹了關(guān)于python基礎(chǔ)之reverse和reversed函數(shù)的介紹及使用,需要的朋友可以參考下
    2022-12-12
  • Python數(shù)據(jù)分析之?Matplotlib?餅圖繪制

    Python數(shù)據(jù)分析之?Matplotlib?餅圖繪制

    這篇文章主要介紹了Python數(shù)據(jù)分析之?Matplotlib?餅圖繪制,文章基于python的相關(guān)資料展開(kāi)詳細(xì)的餅圖繪制,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • windows中python實(shí)現(xiàn)自動(dòng)化部署

    windows中python實(shí)現(xiàn)自動(dòng)化部署

    本文主要介紹了windows中python實(shí)現(xiàn)自動(dòng)化部署,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評(píng)論