解題思路:
(1)floyd算法求解單源最短路徑問題
(2)注意inf (1<<30) 相加時產生的int溢出的問題
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
const int inf = 1<<30;
int n;
int v[110][110];
void floyd()
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(v[i][k] < inf && v[k][j] < inf && v[i][j] > v[i][k] + v[k][j])
v[i][j] = v[i][k] + v[k][j];
int ans = 0;
for(int i=1;i<=n;i++)
ans = max(ans,v[1][i]);
cout<<ans<<endl;
return;
}
int main()
{
cin>>n;
memset(v,0,sizeof(v));
char value[100];
for(int i=2;i<=n;i++)
for(int j=1;j<=i-1;j++)
{
cin>>value;
if(value[0] == 'x')
v[i][j] = inf;
else
v[i][j] = atoi(value);
v[j][i] = v[i][j];
}
floyd();
return 0;
}