2022-04-28:有 n 个城市通过一些航班连接。给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,
生活随笔
收集整理的這篇文章主要介紹了
2022-04-28:有 n 个城市通过一些航班连接。给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2022-04-28:有 n 個城市通過一些航班連接。給你一個數組 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示該航班都從城市 fromi 開始,以價格 pricei 抵達 toi。
現在給定所有的城市和航班,以及出發城市 src 和目的地 dst,你的任務是找到出一條最多經過 k 站中轉的路線,使得從 src 到 dst 的 價格最便宜 ,并返回該價格。 如果不存在這樣的路線,則輸出 -1。
輸入:
n = 3, edges = [[0,1,100],[1,2,100],[0,2,500]]
src = 0, dst = 2, k = 1
輸出: 200
力扣787. K 站中轉內最便宜的航班。
答案2022-04-28:
類似于寬度優先遍歷。Bellman Ford算法,可以處理負邊,但不能處理負數環。
代碼用rust編寫。代碼如下:
fn main() {let n: isize = 3;let mut edges: Vec<Vec<isize>> = vec![vec![0, 1, 100], vec![1, 2, 100], vec![0, 2, 500]];let src: isize = 0;let dst: isize = 2;let k: isize = 1;let ans = find_cheapest_price2(n, &mut edges, src, dst, k);println!("ans = {}", ans); }fn find_cheapest_price2(n: isize,flights: &mut Vec<Vec<isize>>,src: isize,dst: isize,k: isize, ) -> isize {let mut cost: Vec<isize> = vec![];for _k in 0..n {cost.push(9223372036854775807);}cost[src as usize] = 0;for _i in 0..=k {let mut next: Vec<isize> = vec![];for j in 0..n {next.push(cost[j as usize]);}for j in 0..flights.len() {if cost[(flights[j as usize][0]) as usize] != 9223372036854775807 {next[(flights[j as usize][1]) as usize] = get_min(next[(flights[j as usize][1]) as usize],cost[(flights[j as usize][0]) as usize] + flights[j as usize][2],);}}cost = next;}if cost[dst as usize] == 9223372036854775807 {-1} else {cost[dst as usize]} }fn get_min(a: isize, b: isize) -> isize {if a < b {a} else {b} }執行結果如下:
左神java代碼
總結
以上是生活随笔為你收集整理的2022-04-28:有 n 个城市通过一些航班连接。给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第 1 份工作,我只干了 2 周就被辞退
- 下一篇: libyuv接口NV12ToI420的实