日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Floyed】廉价最短路径

發布時間:2023/12/3 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Floyed】廉价最短路径 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

廉價最短路徑

題目大意:

一個圖中,在滿足最短路的前提下,求最小代價

原題:

題目描述

圖是由一組頂點和一組邊組成的。一條邊連接兩個頂點。例如,圖1表示了一個有4個頂點V、5條邊的圖。圖中,每條邊e是有方向的,方向從起點到終點,并且每條邊都有價值。用整數0,1,…,m-1可以表示一個有m個頂點的圖。

一條路徑連接了一個點Vi和另一個點Vj,其方向與經過的一系列邊的方向一致。路徑的長度是途經邊的條數,路徑的費用是邊價值的總和。對于一個給定的圖,你的任務是在所有最短路徑中,找出需要最少費用的連接V0和V1的路徑。一個需要最少費用的最短路徑稱之為廉價最短路徑。
讓我們重新考慮圖1,從0到1的最短路徑是只含一條邊的路徑0→1,費用是10。當然,還有更便宜的路:0→2→1和 0→3→1,但是它們比第一條路徑長(有2條邊)。所以,0→1是廉價最短路徑。
看一下另一個例子,圖2,它有2條最短路徑,其長度是2,路徑0→3→1(費用=4)比路徑0→2→1(費用=5)花費少。還用另一條路徑0→2→3→1(費用=3),雖然便宜但是很長。所以,廉價最短路徑是0→3→1。

輸入

輸入文件第一行有兩個整數m和n,用一個空格隔開,其中,m是頂點數,而n是邊數。接下來的n行給出所有的邊及其價值,每行有3個整數(相鄰兩個整數間有一個空格),表示起點,終點和邊的價值。頂點最多有100個,編號在0到99之間。邊最多有1000條,其價值在0到2^15-1之間。

輸出

輸出文件僅有一行包含一個整數,即V0→V1的廉價最短路徑的費用。當出現有多個廉價最短路徑的情況時,它們的費用是一樣的。

輸入樣例

4 5 0 2 2 0 3 2 0 1 10 2 1 2 3 1 2

輸出樣例

10

說明

東莞市2013年信息學特長生測試題第四題

解題思路:

數據很小,直接Floyed就可以了

代碼:

#include<cstdio> #include<cstring> #include<iostream> using namespace std; int n,m,x,y,z,a[105][105],c[105][105]; int main() {scanf("%d %d",&n,&m);memset(a,127/3,sizeof(a));memset(c,127/3,sizeof(c));for (int i=1;i<=m;++i){scanf("%d %d %d",&x,&y,&z);a[x][y]=z;c[x][y]=1;//預處理}for (int k=0;k<100;++k)for (int i=0;i<100;++i)for (int j=0;j<100;++j)if (c[i][k]+c[k][j]<c[i][j])//求最短路{c[i][j]=c[i][k]+c[k][j];a[i][j]=a[i][k]+a[k][j];}else if (c[i][k]+c[k][j]==c[i][j]&&a[i][k]+a[k][j]<a[i][j]) a[i][j]=a[i][k]+a[k][j];//求最小代價printf("%d",a[0][1]); }

總結

以上是生活随笔為你收集整理的【Floyed】廉价最短路径的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。