思路:要求最短时间从原点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[][];
int n;
int d[];
bool used[]; void djsktra()
{
fill(d,d+n+,inf);
fill(used,used+n+,false);
//memset(d,inf,sizeof(d));
//memset(used,false,sizeof(used));
d[]=; int v;
while(true)
{
v=-;
for(int u=;u<=n;u++)
if( !used[u] && (v==- || d[u]<d[v]) )
v=u;
if(v==-) break;
used[v]=true;
for(int u=;u<=n;u++)
d[u]=min(d[u],d[v]+a[v][u]);
}
return;
} int main()
{
char s[];
while(scanf("%d",&n)!=EOF)
{
for(int i=;i<=n;i++) a[i][i]=;
for(int i=;i<=n;i++)
{
for(int j=;j<i;j++)
{
scanf("%s",s);
if(s[]!='x')
a[i][j]=a[j][i]=atoi(s);//把字符串转换成整型数,ASCII to integer 的缩写。
else
a[i][j]=a[j][i]=inf;
}
}
djsktra(); int maxx=-;
for(int i=;i<=n;i++)
maxx=max(maxx,d[i]);
printf("%d\n",maxx);
}
return ;
}