POJ 1502题
//题目大意:求源点到其余各点的最短距离中的最大值
//解题思路:使用Floy算法实现
#include <stdio.h>
#include <string.h>
#define arraysize 101
int maxData = 0x7fffffff; //定义最大值
int dis[arraysize][arraysize];
char data[100];
int n;
void Floy()
{
for(int i=1;i<n+1;++i)
{
for(int i1=1;i1<n+1;++i1)
{
for(int i2=1;i2<n+1;++i2)
{
if(dis[i1][i]+dis[i][i2]<dis[i1][i2] && dis[i1][i]<maxData && dis[i][i2]<maxData) //此处加一下判断去除无路径相连的情况
{
dis[i1][i2] = dis[i1][i]+dis[i][i2];
}
}
}
}
int max = 0;
for(int i3=2;i3<n+1;++i3)
{
if(dis[1][i3]>max && dis[1][i3]<maxData) //此处注意加一下判断去除无路径相连的情况
max = dis[1][i3];
}
printf("%d\n",max);
}
int main()
{
//freopen("1.txt","r",stdin);
while(scanf("%d",&n)!=EOF)
{
memset(dis,0,sizeof(dis)); //二维数组的初始化
for(int i=2;i<n+1;++i)
{
for(int i1=1;i1<i;++i1)
{
scanf("%s",&data);
if(data[0]=='x')
{
dis[i][i1] = maxData;
dis[i1][i] = maxData;
}
else
{
sscanf(data,"%d",&dis[i][i1]); //用sscanf实现字符串data到整数dis[i][i1]的转换
dis[i1][i] = dis[i][i1];
}
}
}
Floy();
}
return 0;
}