一个三角形矩阵,给一个n,n行n列,当i==j的时候不显示,A(i,j)代表i到j的路程,最后求1到1...n的最短路的最大值。
这道题n的数据范围是100,所以可以用Floyd算法
-----------------------------------------------------------------------------------------
#include <iostream>
#include <math.h>
#include <algorithm>
#include <cstdio>
#include <cstring>
#define MAXN 520
#define MAXM 6000
#define INF 0Xffffff
#define N 100
using namespace std ;
int d[MAXN][MAXN];
int dis[MAXN];
int n;
int ans;
int tmp;
int Map[2000][2100];
int v[2120];
int low[2110];
int flag;
void init()
{
for(int i=0; i<=n; i++)
for(int j=0; j<=n; j++)
Map[i][j] = Map[j][i]= INF;
}
int main()
{
char str[N][N][N];
while(scanf("%d",&n)!=EOF)
{
init();
for(int i=2; i<=n; i++)
{
for(int j=1; j<i; j++)
{
scanf("%s",str[i][j]);
if(strcmp(str[i][j],"x")!=0)
{
Map[i][j]=atoi(str[i][j]);
Map[j][i]=Map[i][j];
}
else
{
Map[i][j]=0x3f3f3f3f;
Map[i][j]=Map[j][i];
}
}
}
for(int k = 1; k<=n; k++)
for(int i = 1; i<=n; i++)
for(int j=1; j<=n; j++)
{
if(Map[i][j]>Map[i][k]+Map[k][j])
Map[i][j] = Map[i][k]+Map[k][j];
}
int big = -INF;
for(int i = 1; i<=n; i++)
{
if(Map[1][i] > big)
big = Map[1][i];
}
printf("%d
",big);
}
return 0;
}