题目链接:http://poj.org/problem?id=1502
dijkstra算法
应该是水题,但自己第一次写,贡献了好多wrong。。。
最后0MS 也對得住wrong的那几次了
#include <stdio.h> #include <stdlib.h> #include <string.h> #define Max 0x3f3f3f3f int tu[150][150]; int set[150]; int sum[150]; void init(int n) { int i,j; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { tu[i][j]=Max; } set[i]=0; sum[i]=Max; } } int dijk(int n,int s) { int i,min,max=0,ti,z=n-1; for(i=1;i<=n;i++) { sum[i]=tu[1][i]; } sum[1]=0; set[1]=1; while(z--){ min=Max; for(i=1;i<=n;i++) { if(set[i]==0) { if(sum[i]>sum[s]+tu[s][i]) { sum[i]=sum[s]+tu[s][i]; } if(min>sum[i]) { min=sum[i]; ti=i; } } } if(min>max) { max=min; } set[ti]=1; s=ti; } return max; } int toint(char a[]) { int i,sum=0,t=1; for(i=strlen(a)-1;i>=0;--i) { sum+=(a[i]-'0')*t; t*=10; } return sum; } int main(int argc, char** argv) { int n,i,j,temp,max; char tem[50]; scanf("%d",&n); init(n); for(i=2;i<=n;i++) { for(j=1;j<i;j++) { scanf("%s",tem); if(tem[0]!='x') { temp=toint(tem); tu[i][j]=temp; tu[j][i]=temp; } } } max=dijk(n,1); printf("%d\n",max); return (EXIT_SUCCESS); }