日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

LeetCode 1976. 到达目的地的方案数(迪杰斯特拉 Python 优先队列)

發(fā)布時(shí)間:2024/7/5 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1976. 到达目的地的方案数(迪杰斯特拉 Python 优先队列) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

你在一個(gè)城市里,城市由 n 個(gè)路口組成,路口編號(hào)為 0 到 n - 1 ,某些路口之間有 雙向 道路。
輸入保證你可以從任意路口出發(fā)到達(dá)其他任意路口,且任意兩個(gè)路口之間最多有一條路。

給你一個(gè)整數(shù) n 和二維整數(shù)數(shù)組 roads ,其中 roads[i] = [ui, vi, timei] 表示在路口 ui 和 vi 之間有一條需要花費(fèi) timei 時(shí)間才能通過(guò)的道路。
你想知道花費(fèi) 最少時(shí)間 從路口 0 出發(fā)到達(dá)路口 n - 1 的方案數(shù)

請(qǐng)返回花費(fèi) 最少時(shí)間 到達(dá)目的地的 路徑數(shù)目
由于答案可能很大,將結(jié)果對(duì) 10^9 + 7 取余 后返回。

示例 1:

輸入:n = 7, roads = [[0,6,7],[0,1,2],[1,2,3],[1,3,3],[6,3,3],[3,5,1],[6,5,1],[2,5,1],[0,4,5],[4,6,2]] 輸出:4 解釋:從路口 0 出發(fā)到路口 6 花費(fèi)的最少時(shí)間是 7 分鐘。 四條花費(fèi) 7 分鐘的路徑分別為: - 0 ? 6 - 0 ? 4 ? 6 - 0 ? 1 ? 2 ? 5 ? 6 - 0 ? 1 ? 3 ? 5 ? 6示例 2: 輸入:n = 2, roads = [[1,0,10]] 輸出:1 解釋:只有一條從路口 0 到路口 1 的路,花費(fèi) 10 分鐘。提示: 1 <= n <= 200 n - 1 <= roads.length <= n * (n - 1) / 2 roads[i].length == 3 0 <= ui, vi <= n - 1 1 <= timei <= 10^9 ui != vi 任意兩個(gè)路口之間至多有一條路。 從任意路口出發(fā),你能夠到達(dá)其他任意路口。

來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/number-of-ways-to-arrive-at-destination
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

2. 解題

類(lèi)似題目:LeetCode 502. IPO(優(yōu)先隊(duì)列)

  • 迪杰斯特拉 最短路徑,優(yōu)先隊(duì)列
class Solution:def countPaths(self, n: int, roads: List[List[int]]) -> int:from queue import PriorityQueueq = PriorityQueue()g = [[] for _ in range(n)]for r in roads:g[r[0]].append((r[1], r[2]))g[r[1]].append((r[0], r[2]))time_roadnums = [[int(1e15), 0] for _ in range(n)]# 存儲(chǔ) 【最短時(shí)間,方案數(shù)】time_roadnums[0][0] = 0time_roadnums[0][1] = 1q.put([0, 0]) # [時(shí)間,id] 第一個(gè)參數(shù)小的優(yōu)先while not q.empty():t, id = q.get()for it in g[id]:nid, times = itif time_roadnums[nid][0] > t+times: # 更短時(shí)間time_roadnums[nid][0] = t+timestime_roadnums[nid][1] = time_roadnums[id][1] # 方案數(shù)清空,換成當(dāng)前的q.put([t+times, nid])elif time_roadnums[nid][0] == t+times: # 相同時(shí)間time_roadnums[nid][1] += time_roadnums[id][1] # 方案數(shù)累加 return time_roadnums[n-1][1]%int(1e9+7)

80 ms 20.9 MB Python3

順便問(wèn)一句,Python 優(yōu)先隊(duì)列 怎么改 優(yōu)先級(jí)為 大的優(yōu)先?請(qǐng)大家賜教


我的CSDN博客地址 https://michael.blog.csdn.net/

長(zhǎng)按或掃碼關(guān)注我的公眾號(hào)(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!

總結(jié)

以上是生活随笔為你收集整理的LeetCode 1976. 到达目的地的方案数(迪杰斯特拉 Python 优先队列)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。