題意:
給你n個點,m條無向邊,每條邊都有長度d和花費p,給你起點s終點t,要求輸出起點到終點的最短距離及其花費,如果最短距離有多條路線,則輸出花費最少的。
解題思路:這是最短路問題的變形,以前做的只是求兩點之間的最短距離,現在除了距離最短,在此基礎上增加了花費最少。用弗洛伊德演算法同樣可以求解。
注意:輸入時要考慮重邊情況。由於0
view code
1 #include
2 #include
3 #include
4using
namespace std;56
#define max 0xfffffff
7int map[1005][1005],money[1005][1005];
8int dis[1005],pri[1005],sign[1005];
9int main()
10 25
else
if(map[a][b]==d&&money[a][b]>p)
26 money[a][b]=money[b][a]=p;
27 }
28 scanf("
%d%d
",&s,&t);
29for(i=1;i<=n;i++)
30
34 sign[s]=1;
35 dis[s]=pri[s]=0;
36int dmin,pmin,u;
37while(1)
38
46 sign[u]=1;
47if(u==t) break;
48for(i=1;i<=n;i++)
49if(!sign[i]&&map[u][i]>0)
50
56else
if(dis[u]+map[u][i]==dis[i]&&pri[u]+money[u][i]57 pri[i]=pri[u]+money[u][i];
58 }
59 }
60 printf("
%d %d\n
",dis[t],pri[t]);
61 }
62return
0;63 }
hdu3790 最短路徑問題
wa了無數次,終於過了,還是dijkstra,只不過在距離,相同時,多判斷一下時間。注意重邊!include include include define m 0x7fffffff using namespace std struct p 2000 struct c 1020 1020 int vi...
HDU 3790 最短路徑問題
hdu 3790 最短路徑問題 單源最短路勁,更新路勁時要更新花費 include include include includeusing namespace std define inf 0x7fffffff int n,m int map 1005 1005 int cost 1005 100...
HDU 3790 最短路徑問題
include include include define nil 100000 struct node node 1001 初始化操作,把源點初始化為0,其他正無窮 param n 結點個數 param s 源點 int init shortpath source int n,int s nod...