题目链接:http://poj.org/problem?id=1502
dijkstra。
1 #include<cstdio> 2 #include<cstring> 3 #include<string> 4 #include<iostream> 5 using namespace std; 6 const int inf=0x3f3f3f3f; 7 int pic[110][110]; 8 int vis[110]; 9 int dis[110]; 10 11 int n; 12 13 void dijkstra() 14 { 15 for(int i=1;i<=n;i++){ 16 dis[i]=inf; 17 vis[i]=0; 18 } 19 dis[1]=0; 20 for(int i=0;i<n;i++) 21 { 22 int x,m=inf; 23 for(int y=1;y<=n;y++) if(!vis[y]&&m>dis[y]) m=dis[x=y]; 24 vis[x]=1; 25 for(int y=1;y<=n;y++) if(!vis[y]&&dis[y]>dis[x]+pic[x][y]) dis[y]=dis[x]+pic[x][y]; 26 } 27 } 28 29 int tran(string s) 30 { 31 int len=s.length(); 32 int d=0; 33 for(int i=0;i<len;i++) 34 d=d*10+(s[i]-‘0‘); 35 return d; 36 } 37 38 int main() 39 { 40 41 int d; 42 string s; 43 while(scanf("%d",&n)!=EOF) 44 { 45 46 for(int i=1;i<=n;i++) 47 for(int j=1;j<=n;j++) 48 pic[i][j]=(i==j?0:inf); 49 for(int i=2;i<=n;i++) 50 for(int j=1;j<i;j++) 51 { 52 cin>>s; 53 if(s=="x") continue; 54 else 55 { 56 d=tran(s); 57 pic[i][j]=pic[j][i]=d; 58 } 59 60 61 } 62 dijkstra(); 63 int ans=-1; 64 for(int i=2;i<=n;i++) 65 ans=max(ans,dis[i]); 66 printf("%d\n",ans); 67 } 68 }
时间: 2024-11-05 12:31:37