1. 程式人生 > >Heavy Transportation

Heavy Transportation

iostream 定義 OS 中一 str eof math string main

POJ - 1797

這題求:1到n的路徑中,邊權最小的定義是min,求出min的最大值)

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<cstdio>
 6 using namespace std;
 7 
 8 const int INF=0x3f3f3f3f;
 9 int n,m;
10 int e[1005][1005];
11 
12 int dijkstra()
13 {
14 int book[1005]; 15 int wei[1005]; 16 for(int i=1;i<=n;i++) 17 { 18 wei[i]=e[1][i]; 19 book[i]=0; 20 } 21 book[1]=1; 22 wei[1]=0; //................ 23 24 int u; 25 for(int i=2;i<=n;i++) 26 { 27 int temp=0; 28 for(int j=1;j<=n;j++)
29 { 30 if(!book[j] && wei[j]>temp) 31 { 32 u=j; 33 temp= wei[j]; 34 } 35 } 36 book[u]=1; 37 38 for(int j=1;j<=n;j++) 39 { 40 if(!book[j] && wei[j]< min( e[j][u], wei[u]) )
41 wei[j]= min( e[j][u], wei[u]); 42 //更新,因為wei是儲存1到每一個點的能通過的最大的重量 43 //所以要更新 使 j從1-n的 wei[j]比 “wei[u]和它下一段的e[u][j]其中一段的最小值 ” 的大, 44 } 45 } 46 return wei[n]; 47 48 } 49 int main() 50 { 51 int cas=0; 52 int a,b,w; 53 int T; 54 scanf("%d",&T); 55 for(int i=1;i<=T;i++) 56 { 57 memset(e,0,sizeof(e)); 58 scanf("%d%d",&n,&m); 59 for(int i=1;i<=m;i++) 60 { 61 scanf("%d%d%d",&a,&b,&w); 62 if( w >e[a][b]) 63 e[a][b]=e[b][a]=w; 64 } 65 printf("Scenario #%d:\n%d\n\n",++cas,dijkstra()); 66 } 67 }

Heavy Transportation