文章目錄
1. 題目
你在一個城市里,城市由 n 個路口組成,路口編號為 0 到 n - 1 ,某些路口之間有 雙向 道路。
輸入保證你可以從任意路口出發到達其他任意路口,且任意兩個路口之間最多有一條路。
給你一個整數 n 和二維整數數組 roads ,其中 roads[i] = [ui, vi, timei] 表示在路口 ui 和 vi 之間有一條需要花費 timei 時間才能通過的道路。
你想知道花費 最少時間 從路口 0 出發到達路口 n - 1 的方案數。
請返回花費 最少時間 到達目的地的 路徑數目 。
由于答案可能很大,將結果對 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 出發到路口
6 花費的最少時間是
7 分鐘。
四條花費
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 的路,花費
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
任意兩個路口之間至多有一條路。
從任意路口出發,你能夠到達其他任意路口。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/number-of-ways-to-arrive-at-destination
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
類似題目:LeetCode 502. IPO(優先隊列)
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
)]time_roadnums
[0][0] = 0time_roadnums
[0][1] = 1q
.put
([0, 0]) while not q
.empty
():t
, id = q
.get
()for it
in g
[id]:nid
, times
= it
if time_roadnums
[nid
][0] > t
+times
: time_roadnums
[nid
][0] = t
+timestime_roadnums
[nid
][1] = time_roadnums
[id][1] q
.put
([t
+times
, nid
])elif time_roadnums
[nid
][0] == t
+times
: time_roadnums
[nid
][1] += time_roadnums
[id][1] return time_roadnums
[n
-1][1]%int(1e9+7)
80 ms 20.9 MB Python3
順便問一句,Python 優先隊列 怎么改 優先級為 大的優先?請大家賜教
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 1976. 到达目的地的方案数(迪杰斯特拉 Python 优先队列)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。