婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python3實現無權最短路徑的方法

python3實現無權最短路徑的方法

熱門標簽:海南400電話如何申請 廣告地圖標注app 陜西金融外呼系統 公司電話機器人 唐山智能外呼系統一般多少錢 白銀外呼系統 騰訊外呼線路 激戰2地圖標注 哈爾濱ai外呼系統定制

問題描述

現有一個有向無權圖。如下圖所示:

 

問題:使用某個頂點s作為輸入參數,找出從s到所有其他頂點的最短路徑。
說明:因為是無權圖,因此我們可以為每臺邊賦值為1。這里選擇v3為s作為起點。

問題分析

此時立刻可以說,從s到v3的最短路徑是長為0的路徑,標記此信息,得到下圖。

 

現在開始尋找從s出發距離為1的頂點。這些頂點肯定是與s鄰接的頂點,很明顯,v1,v6從s出發只需要一條邊就到了。所以,從s出發距離為1的頂點,為v1,v6。

 

現在開始尋找從s出發距離為2的頂點。這些頂點肯定是與v1,v6(距離為1的頂點)鄰接的頂點。發現與v1鄰接的頂點為v2,v4,與v6鄰接的頂點沒有(不能往回走,沒有出邊)。所以,從s出發距離為2的頂點,為v2,v4。

 

最后,考察與v2,v4鄰接的頂點,即v5,v7。所以,從s出發距離為3的頂點,為v5,v7。

 

這種搜索圖的方法稱為廣度優先搜索(breadth-first search)。按層處理頂點,距離起點近的頂點先處理,距離起點遠的后處理。

偽代碼(處理節點)

void unweighted(Vertex s){
    QueueVertex> q = new QueueVertex>();
    //把每個頂點的距離設為無窮大
    for each Vertex v
        v.dist = INFINITY
    //將起點的距離設為0
    s.dist = 0;
    //起點入隊,作為算法的開始
    q.enqueue(s);
    //只要隊列不為空,便繼續循環
    while( !q.isEmpty() ){
        //獲得出隊頂點
        Vertex v = q.dequeue();
        //對與v鄰接的每個頂點進行處理
        for each Vertex w adjacent to v
            if(w.dist == INFINITY){
                w.dist = v.dist + 1;
                w.path = v;//代表w的上一個經過的頂點為v
                //完成操作后,便入隊,以用來接著分析與w鄰接的頂點們
                q.enqueue( w );
            }
    }
}

實現過程

 

 

從s開始到頂點的距離放到dv列里,pv列用來代表,當前行代表的頂點的上一個經過的頂點。known列代表此頂點已經被處理過了。

初始化時,將起點的距離設置為0,且所有的頂點都不是know的。

 

結合偽代碼進行分析:
【1】當第一次循環中,出隊的是v3(每次循環只出隊一個頂點)
【2】而第一次循環結束時,就是上表中“v3出隊后”的數據情況,如下
【3】此時,對v3的鄰接的頂點們都作了處理,所以v3就從F變成了T(即已知)
【4】與v3鄰接的頂點v1,v6都作了處理,dv都變成了1,pv都為v3
【5】而因為與v1,v6的鄰接頂點都還沒有開始處理呢,所以v1,v6的F還不能變成T

得到無權最短路徑

通過觀察圖,可以發現有兩條路徑長為3的最短路徑。
【1】v3 => v1 => v2 => v5
【2】v3 => v1 => v4 => v7
我們可以通過數據變化表的最終情況來找到這兩條路徑。

 

注意,第一行代表v1,以此類推。
以找到v3 => v1 => v2 => v5路徑為例,過程如下:
【1】找到距離為0的頂點,0在且只在第三行,所以第一個頂點為v3
【2】找到距離為1且pv為v3的頂點,有第一行和第六行,這里必須選一個,這里選第一行,所以第二個頂點為v1
【3】找到距離為2且pv為v1的頂點,有第二行和第四行,這里選第二行,所以第三個頂點為v2
【4】找到距離為3且pv為v2的頂點,只有第五行,所以第四個頂點為v5
【5】找到距離為4且pv為v5的頂點,沒有,結束。
其實,以上步驟,是給出了,在對頂點進行數據處理后,找出無權最短路徑的算法的思想。
其實可以,維護一些頂點間指針,用來指向下一個頂點,這樣就可以用遞歸的思路來做,從起點開始,每遞歸到下一層距離dv便加1,用一個中間變量存儲經過的頂點,每調用一次遞歸,便打印這個中間變量,這樣,便能得到所有的無權最短路徑。
這里得到無權最短路徑的偽代碼也不給出了,以上分析供大家理解參考。

代碼實現

紙上得來終覺淺,絕知此事要躬行!還是覺得用代碼實現一遍比較好。

from queue import Queue
class Vertex:
    #頂點類
    def __init__(self,vid,outList):
        self.vid = vid#出邊
        self.outList = outList#出邊指向的頂點id的列表,也可以理解為鄰接表
        self.know = False#默認為假
        self.dist = float('inf')#s到該點的距離,默認為無窮大
        self.prev = 0#上一個頂點的id,默認為0

#創建頂點對象
v1=Vertex(1,[2,4])
v2=Vertex(2,[4,5])
v3=Vertex(3,[1,6])
v4=Vertex(4,[3,5,6,7])
v5=Vertex(5,[7])
v6=Vertex(6,[])
v7=Vertex(7,[6])
#創建一個長度為8的數組,來存儲頂點,0索引元素不存
vlist = [False,v1,v2,v3,v4,v5,v6,v7]
def unweighted():
    #起點為v3
    vlist[3].dist = 0
    q = Queue()
    q.put(vlist[3])
    while(not q.empty()):
        v = q.get()#返回并刪除隊列頭部元素
        for w in v.outList:
            if(vlist[w].dist == float('inf')):
                vlist[w].dist = v.dist + 1
                vlist[w].prev = v.vid
                q.put(vlist[w])

unweighted()
print('v1.prev:',v1.prev,'v1.dist',v1.dist)
print('v2.prev:',v2.prev,'v2.dist',v2.dist)
print('v3.prev:',v3.prev,'v3.dist',v3.dist)
print('v4.prev:',v4.prev,'v4.dist',v4.dist)
print('v5.prev:',v5.prev,'v5.dist',v5.dist)
print('v6.prev:',v6.prev,'v6.dist',v6.dist)
print('v7.prev:',v7.prev,'v7.dist',v7.dist)

運行結果:

 

與數據變化表的最終情況一致。
這里你可能會問,Vertex類的init函數中,明明有know成員,為什么在程序沒有使用know成員(在處理節點后,就把該節點的know置為Ture),因為if(vlist[w].dist == float('inf'))的判斷就相當于判斷節點的know是否為Ture,因為一個已知的節點,它的距離就肯定不是無窮大了。
然后再使用遞歸,打印出所有可能的最短路徑,把以下代碼和以上代碼合在一起就可以了。

traj_list = [3]#v3是起點直接加上

def print_traj(dist):
    last = traj_list[-1]
    print(traj_list,'該路徑的長度為:',vlist[last].dist)
    temp_list = []#存儲下一步的選項
    for i in range(1,len(vlist)):
        v = vlist[i]
        if((v.dist==dist) and (v.prev==last)):
            temp_list.append(i)
    if(len(temp_list)==0):
        return#終點
    #遞歸每個選項
    for i in temp_list:#i為頂點的索引
        traj_list.append(i)
        print_traj(dist+1)
        traj_list.pop()


print_traj(1)

到此這篇關于python3實現無權最短路徑的方法的文章就介紹到這了,更多相關python3 無權最短路徑內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python實現迪杰斯特拉算法并生成最短路徑的示例代碼
  • python實現最短路徑的實例方法
  • python Dijkstra算法實現最短路徑問題的方法
  • python實現Dijkstra算法的最短路徑問題
  • python游戲地圖最短路徑求解
  • Python實現的多叉樹尋找最短路徑算法示例
  • Python基于Floyd算法求解最短路徑距離問題實例詳解

標簽:黑龍江 黔西 四川 常德 益陽 上海 鷹潭 惠州

巨人網絡通訊聲明:本文標題《python3實現無權最短路徑的方法》,本文關鍵詞  python3,實現,無權,最短,路徑,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python3實現無權最短路徑的方法》相關的同類信息!
  • 本頁收集關于python3實現無權最短路徑的方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧亚洲嫩模精品一区三区| 91精品国产欧美一区二区| 欧美亚洲一区二区三区四区| 久久久精品天堂| 久久99久久久久久久久久久| 欧美一区二区三区视频在线观看| 亚洲一区视频在线| 欧美男男青年gay1069videost| 亚洲777理论| 欧美一区二区视频免费观看| 免费精品视频在线| 国产片一区二区| 成人av网站免费| 一区二区三区在线播放| 欧美精品 国产精品| 久久精品免费看| 国产精品高清亚洲| 欧美三级三级三级| 国产精品一级片| 一区二区激情视频| 7777精品伊人久久久大香线蕉完整版 | 成人免费看片app下载| 国产精品久久久久桃色tv| 日本高清不卡aⅴ免费网站| 日本网站在线观看一区二区三区 | 亚洲视频电影在线| 91精品国产色综合久久不卡电影| 国产一区二三区好的| 亚洲日本免费电影| 精品国产污污免费网站入口| 91色.com| 岛国一区二区在线观看| 免费久久99精品国产| 综合色中文字幕| 国产亚洲精品中文字幕| 911精品产国品一二三产区| 99久久精品国产毛片| 国产一区二区三区av电影 | 蜜臀av性久久久久蜜臀aⅴ流畅| 国产日本欧洲亚洲| 日韩欧美在线网站| 色综合久久久久网| 大桥未久av一区二区三区中文| 亚洲国产精品影院| 中文字幕亚洲不卡| 国产欧美日韩三级| 欧美不卡一区二区三区| 欧美日韩视频在线一区二区| 成人99免费视频| 国产一区二区美女| 久久99久久99小草精品免视看| 夜夜嗨av一区二区三区中文字幕| 国产精品免费观看视频| 久久亚洲捆绑美女| 91精品国产综合久久福利 | 中文字幕一区二区在线播放| ww亚洲ww在线观看国产| 精品国产乱码久久久久久浪潮| 欧美视频精品在线| 色综合久久中文字幕| 91视频精品在这里| 99精品偷自拍| 91亚洲国产成人精品一区二区三 | 在线免费观看日本一区| 在线观看91精品国产入口| 日本乱人伦一区| 一本大道久久a久久精二百| av不卡免费在线观看| 91在线观看免费视频| 91久久精品一区二区三| 在线精品视频一区二区三四| 91福利国产成人精品照片| 欧美性猛交xxxxxxxx| 在线播放一区二区三区| 欧美日本韩国一区二区三区视频| 欧美日韩精品欧美日韩精品一综合| 欧美性猛交xxxx乱大交退制版| 欧美日韩亚洲不卡| 精品美女一区二区| 久久久久久99精品| 亚洲欧美日韩国产综合| 亚洲综合精品自拍| 免费成人结看片| 成人国产视频在线观看| 欧美在线观看禁18| 精品久久久久香蕉网| 欧美激情中文字幕| 亚洲v中文字幕| 狠狠色综合日日| 99精品一区二区| 91精品国产综合久久久久久久 | 国产高清一区日本| 在线观看网站黄不卡| 欧美一二三区精品| 亚洲欧洲av色图| 日本女人一区二区三区| 国产成人午夜精品影院观看视频| 95精品视频在线| 日韩欧美自拍偷拍| 亚洲欧美激情在线| 精品影院一区二区久久久| 波多野结衣精品在线| 欧美一区二区性放荡片| 亚洲视频免费在线| 国模套图日韩精品一区二区| 色视频成人在线观看免| 欧美成人女星排行榜| 亚洲蜜臀av乱码久久精品| 国内精品久久久久影院一蜜桃| 91麻豆国产福利精品| 日韩美一区二区三区| 亚洲精选免费视频| 成人妖精视频yjsp地址| 日韩欧美一二三四区| 亚洲视频一区二区在线观看| 另类小说色综合网站| 欧美日韩在线一区二区| 中文字幕一区二区三区在线观看 | 久久精品国产免费| 色偷偷成人一区二区三区91 | 久久女同性恋中文字幕| 亚洲va欧美va人人爽午夜| 不卡的av电影在线观看| 久久久久久久性| 老司机免费视频一区二区三区| 色综合久久久网| 亚洲欧美区自拍先锋| 成人免费视频视频| 国产三级精品三级在线专区| 喷白浆一区二区| 欧美精品丝袜久久久中文字幕| 亚洲乱码日产精品bd| 91网站黄www| 亚洲欧美日韩国产一区二区三区 | 成人做爰69片免费看网站| 久久久久久免费毛片精品| 国产一区 二区 三区一级| 精品国产乱码久久久久久蜜臀 | 久久久久久免费网| 久久国产精品露脸对白| 欧美不卡一区二区| 国产麻豆一精品一av一免费| 2020国产精品自拍| 九九**精品视频免费播放| 精品国产乱码久久| 国产在线精品一区二区不卡了| 2017欧美狠狠色| 国产精品亚洲视频| 亚洲欧美一区二区久久| 欧洲精品在线观看| 肉丝袜脚交视频一区二区| 91麻豆精品国产91久久久久久久久 | 天天影视网天天综合色在线播放| 欧美色成人综合| 日韩avvvv在线播放| 日韩视频123| 国产精品影视天天线| 国产精品色一区二区三区| 成人av片在线观看| 亚洲国产aⅴ成人精品无吗| 欧美一区二区在线看| 国内成人精品2018免费看| 中日韩av电影| 欧美午夜片在线看| 石原莉奈在线亚洲三区| 精品国产伦一区二区三区免费| 国产精品一区二区不卡| 亚洲欧美激情视频在线观看一区二区三区| 欧美色图第一页| 国内精品嫩模私拍在线| 综合久久综合久久| 制服丝袜亚洲播放| 风间由美中文字幕在线看视频国产欧美| 中文字幕av免费专区久久| 欧美三区在线视频| 高潮精品一区videoshd| 亚洲成人自拍网| 久久影院午夜论| 欧美日韩一区二区三区在线看 | 国产精品系列在线观看| 一区二区三区欧美视频| 精品国产乱码久久久久久浪潮| 97精品国产97久久久久久久久久久久 | 国产精品视频yy9299一区| 欧美日韩国产小视频| 成人黄动漫网站免费app| 欧美aⅴ一区二区三区视频| 一区在线观看免费| 精品久久一区二区| 欧美久久久久久蜜桃| 91美女片黄在线观看91美女| 国产一区不卡在线| 日本不卡视频在线| 亚洲一区二区三区四区五区中文 | 欧美午夜精品久久久| 白白色 亚洲乱淫| 国产激情视频一区二区三区欧美| 首页综合国产亚洲丝袜| 亚洲综合一二区| 亚洲同性gay激情无套|