亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python最短路徑問題如何解決

發布時間:2022-05-27 15:27:04 來源:億速云 閱讀:225 作者:iii 欄目:大數據

這篇文章主要介紹“python最短路徑問題如何解決”,在日常操作中,相信很多人在python最短路徑問題如何解決問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python最短路徑問題如何解決”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

說明

1、最短路徑問題是圖論研究中的經典算法問題,用于計算從一個頂點到另一個頂點的最短路徑。

2、最短路徑問題有幾種形式:確定起點的最短路徑,確定終點的最短路徑,確定起點和終點的最短路徑,全局最短路徑問題。

路徑長度是將每個頂點到相鄰頂點的長度記為1,而不是指兩個頂點之間的道路距離——兩個頂點之間的道路距離是連接邊的權利。

實例

def findMin(row):
    minL = max(row)
    for i in row:
        if i != -1 and minL > i:
            minL = i
    return minL
def initRow(row, plus):
    r = []
    for i in row:
        if i != -1:
            i += plus
        r.append(i)
    return r
 
def getMinLen(table, e, t):
    count = len(table) - 1
    startPoint = 1
    #記錄原點到各點最短距離 初始值為-1,即不可達
    lenRecord = list((-1 for i in range(count+1)))
    lenRecord[startPoint] = 0
    #記錄每次循環的起點
    points = [startPoint]
    #已得到最短距離的點
    visited = set()
    while len(points)>0:
        #當前起點
        curPoint = points.pop()
        #原點到當前起點的距離
        curLen = lenRecord[curPoint]
        #當前起點到各點的距離
        curList = initRow(table[curPoint], t)
        #當前起點到各點的最短距離
        curMin = findMin(curList)
        visited.add(curPoint)
        idx = 0
        while idx<count:
            idx += 1
            #當前點不可達或到當前點的最短距離已計算出 則跳過
            if curList[idx] == -1 or idx in visited:
                continue
            #記錄距離當前起點最近的點作為下次外層循環的起點
            if curList[idx] == curMin:
                points.append(idx)
            #如果從原點經當前起點curPoint到目標點idx的距離更短,則更新
            if lenRecord[idx] == -1 or lenRecord[idx] > (curLen+curList[idx]):
                lenRecord[idx] = curLen+curList[idx]
    return lenRecord[e]
 
def processInput():
    pointCnt, roadCnt, jobCnt = (int(x) for x in raw_input().split())
    table = []
    for i in range(pointCnt+1):
        table.append([-1] * (pointCnt+1))
    for i in range(roadCnt):
        (x, y, w) = (int(n) for n in raw_input().split())
        if table[x][y] == -1 or table[x][y] > w:
            table[x][y] = w
            table[y][x] = w
    res = []
    for i in range(jobCnt):
        e, t = (int(x) for x in raw_input().split())
        res.append(getMinLen(table, e, t))
    for i in res:
        print(i)
 
processInput()

到此,關于“python最短路徑問題如何解決”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

富锦市| 威信县| 新安县| 洞头县| 大邑县| 安康市| 湘西| 徐州市| 吐鲁番市| 大港区| 商丘市| 田东县| 水城县| 奈曼旗| 读书| 类乌齐县| 澄城县| 蒲城县| 鹤壁市| 滦南县| 大厂| 永顺县| 宣威市| 旬阳县| 容城县| 青冈县| 康定县| 芦山县| 山阴县| 平远县| 德格县| 英德市| 平湖市| 淮北市| 阿巴嘎旗| 汉沽区| 湟源县| 麻城市| 甘孜县| 舟曲县| 兴安县|