思路:要求最短时间从原点1到所有的点,先求到所有点的最短距离。
因为是可以同时 向各个方向出发,所以到达最远的那个点的时候,其他点已经到达了。
即求单源最短路径中的最长的那条路径值
#include<stdio.h> #include<iostream> #include<algorithm> #include<cstring> #include<math.h> #include<string> #define ll long long #define inf 0x3f3f3f3f using namespace std; int a[105][105]; int n; int d[105]; bool used[105]; void djsktra() { fill(d,d+n+1,inf); fill(used,used+n+1,false); //memset(d,inf,sizeof(d)); //memset(used,false,sizeof(used)); d[1]=0; int v; while(true) { v=-1; for(int u=1;u<=n;u++) if( !used[u] && (v==-1 || d[u]<d[v]) ) v=u; if(v==-1) break; used[v]=true; for(int u=1;u<=n;u++) d[u]=min(d[u],d[v]+a[v][u]); } return; } int main() { char s[10]; while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;i++) a[i][i]=0; for(int i=1;i<=n;i++) { for(int j=1;j<i;j++) { scanf("%s",s); if(s[0]!='x') a[i][j]=a[j][i]=atoi(s);//把字符串转换成整型数,ASCII to integer 的缩写。 else a[i][j]=a[j][i]=inf; } } djsktra(); int maxx=-1; for(int i=1;i<=n;i++) maxx=max(maxx,d[i]); printf("%d ",maxx); } return 0; }