成人视屏在线观看-国产99精品-国产精品1区2区-欧美一级在线观看-国产一区二区日韩-色九九九

您的位置:首頁技術文章
文章詳情頁

python實現狄克斯特拉算法

瀏覽:62日期:2022-06-23 10:31:15
數據結構1、路由信息

dictRoute = {}dictRoute[nodeId] = {}dictRoute[nodeId][nebrId] = distance操作:①根據nodeId找到該node的路由信息②根據nebrId找到某一條路由的距離

2、節點信息

dictNode = {}dictNode[nodeId] = [shortDis, fatherId, bIsCheck]操作:①找到nodes中最短距離的節點②查找節點的shortDis,根據情況更新shortDis、fatherId③檢查過的節點,更新bIsCheck

功能實現

/* 找到最短距離節點的Id,已經檢查的不計算在內 */def FindShortNodeId(dictNode):return shortNodeId

/* dikstra算法流程 */1、找到最短距離節點Id,并標記已檢查過 (如果節點Id不存在,表示查找完成)2、得到最短距離節點的距離3、輪詢最短距離節點的鄰居節點4、計算鄰居節點的新距離、得到原最短距離,進行比較5、如果新距離 < 原距離,則更新鄰居節點最短距離概括為兩步:步驟1 (1)- 找到當前最短距離節點步驟2(2~5) - 更新最短距離節點鄰居節點信息

代碼實現

import osimport sys’’’信息輸入:1、節點數目、路由數目2、路由信息 3、開始節點、結束節點’’’nodeNum = 0 # 節點數目routeNum = 0 # 路由數目listRoute = [] # 臨時存儲輸入的路由信息listNodeId = []# 臨時存儲節點id nodeIdStart = ’’nodeIdEnd = ’’dictRoute = {} # 解析后的路由信息dictNode = {} # 節點信息# 輸入節點數目、路由數目strInput = input()list0 = strInput.split(’ ’)nodeNum = int(list0[0])routeNum = int(list0[1])# 輸入路由信息for index in range(routeNum): strInput = input() listRoute.append(strInput) # 輸入開始節點、結束節點strInput = input()list0 = strInput.split(’ ’)nodeIdStart = list0[0]nodeIdEnd = list0[1]# 解析得到節點IdlistNodeId.append(nodeIdStart)listNodeId.append(nodeIdEnd)for index in listRoute: list0 = index.split(’ ’) nodeIdA = list0[0] nodeIdB = list0[1] if nodeIdA not in listNodeId: listNodeId.append(nodeIdA) if nodeIdB not in listNodeId: listNodeId.append(nodeIdB) # 初始化路由信息字典、節點信息字典for nodeId in listNodeId: # 節點字典信息 dictNode[nodeId] = [10000, ’’, False] # 最短距離、父節點、是否檢查過 # 每個路由字典創建 dictRoute[nodeId] = {}dictNode[nodeIdStart][0] = 0# 初始化路由信息for index in listRoute: list0 = index.split(’ ’) nodeIdA = list0[0] nodeIdB = list0[1] dictRoute[nodeIdA][nodeIdB] = int(list0[2]) dictRoute[nodeIdB][nodeIdA] = int(list0[2]) # 打印輸入信息def PrintInputInfo(): print(’nodeNum routeNum:’) print(str(nodeNum) + ’ ’ + str(routeNum)) print(’nodeStart nodeEnd’) print(nodeIdStart+’ ’+nodeIdEnd) print(’route info:’) for nodeId in dictRoute.keys(): for nebrId in dictRoute[nodeId].keys(): print(nodeId+’->’+nebrId+’ = ’+str(dictRoute[nodeId][nebrId])) print(’node info:’) for nodeId in dictNode.keys(): print(nodeId+’:’+str(dictNode[nodeId][0])+’ ’+dictNode[nodeId][1]+’ ’+str(dictNode[nodeId][2]))#PrintInputInfo()’’’狄克斯特拉實現’’’# 找到最短距離節點iddef FindShortNodeId(dictNode): shortNodeId = ’’ shortDis = 10000 for nodeId in dictNode.keys(): if dictNode[nodeId][0] < shortDis and dictNode[nodeId][2] == False: shortNodeId = nodeId shortDis = dictNode[nodeId][0] return shortNodeId # 狄克斯特拉算法shortNodeId = FindShortNodeId(dictNode)while shortNodeId: if shortNodeId == nodeIdEnd: break; dictNode[shortNodeId][2] = True shortDis = dictNode[shortNodeId][0] for nebrId in dictRoute[shortNodeId].keys(): newDis = dictRoute[shortNodeId][nebrId] + shortDis if newDis < dictNode[nebrId][0]: dictNode[nebrId][0] = newDis dictNode[nebrId][1] = shortNodeId shortNodeId = FindShortNodeId(dictNode) # 打印結果listRst = []nodeId = nodeIdEndwhile nodeId: listRst.append(nodeId) nodeId = dictNode[nodeId][1]listRst.reverse()strRst = ’’for nodeId in listRst: if nodeId == listRst[-1]: strRst += nodeId else: strRst += nodeId + ’->’if dictNode[nodeIdEnd][1] == ’’: print(’cant reach ’+nodeIdEnd)else: print(strRst) print(dictNode[nodeIdEnd][0])測試用例及驗證

Case1輸入:6 41 2 21 3 42 5 35 6 22 6

python實現狄克斯特拉算法

輸出:

python實現狄克斯特拉算法

Case2輸入:4 5S A 6S B 2B A 3A E 1B E 5S E

python實現狄克斯特拉算法

輸出:

python實現狄克斯特拉算法

Case3(找不到終點)輸入:6 6S A 2S B 1A C 4A B 1B D 2C D 3S End

python實現狄克斯特拉算法

輸出:

python實現狄克斯特拉算法

Case4輸入:6 8S A 5S B 1A C 1A B 1B D 5C D 1D End 1C End 3S End

python實現狄克斯特拉算法

輸出:

python實現狄克斯特拉算法

以上就是python實現狄克斯特拉算法的詳細內容,更多關于python狄克斯特拉的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 免费特黄一级欧美大片 | 亚洲视频精品 | 免费a级毛片网站 | 69成人 | 欧美一区二区三区免费不卡 | 在线观看黄网 | 欧美精品人爱c欧美精品 | 亚洲www视频 | 久久精品国产只有精品2020 | 国产一区免费在线观看 | 成年人视频在线免费 | 欧美成人免费全部色播 | 久久91亚洲精品中文字幕 | 2020精品极品国产色在线观看 | 自拍偷自拍亚洲精品10p | 在线免费观看亚洲 | 国内精品九一在线播放 | 三级黄色毛片视频 | 免费视频一区二区三区四区 | 美女视频一区二区三区 | 午夜三级在线 | 国产亚洲精品久久久久久午夜 | 国产网址在线观看 | 国产欧美一区视频在线观看 | 狼人总合狼人综合 | 国产不卡在线播放 | 成人在线一区二区 | 国产v综合v亚洲欧美大另类 | 香蕉久久一区二区不卡无毒影院 | 欧美a极品极品欧美 | 亚洲福利视频一区二区三区 | 国产女人伦码一区二区三区不卡 | 亚洲第一色网 | 成年人黄色免费网站 | 精品九九久久国内精品 | 久久久久久久久久久9精品视频 | 三级毛片免费 | 中文字幕在线一区二区三区 | 真人一级一级特黄高清毛片 | 国产精品亚洲二区在线 | 中文字幕福利 |