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;
}

你可能感兴趣的:(poj)