关闭

poj 1125 最短路问题

243人阅读 评论(0) 收藏 举报

额,刚开始都不带看清楚题意的,今天阳光很好,心情也好,下午准备去玩。。。。

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;

#define MAX 1000
#define INF (1<<20)
int dist[MAX][MAX];
int point, maxsize, minsize;
void init(int n)
{
 for(int i=1; i<=n; i++)
 for(int j=1; j<=n; j++)
    dist[i][j]=(i==j? 0: INF);
    int k, v, w;
    for(int i=1;i<=n; i++)
    {
      scanf("%d",&k);
      while(k--)
      {
       scanf("%d %d", &v, &w);
       dist[i][v] = w;
      }
    }
}

int floyd(int n)
{
    int i, j, k;
    for(i=1; i<=n; i++)
    for(j=1; j<=n; j++)
    for(k=1; k<=n; k++)
    if(dist[j][k]>dist[j][i] + dist[i][k])
    dist[j][k] = dist[j][i] + dist[i][k];
  return 0;  
}

int search(int n)
{
    int i,j;
     minsize = INF;
    for(i=1; i<=n; i++)
    {
      maxsize = 0;
     for(int j=1; j<=n; j++)
     if(dist[i][j]>maxsize)
     maxsize = dist[i][j];
     if(maxsize < minsize)
     {
      minsize = maxsize;
      point = i;
     }
    }
 return 0;
}
int main()
{
    int n;
    while(scanf("%d",&n)&&n)
    {
     init(n);
     floyd(n);
     search(n);
     if(minsize==INF)
     printf("disjoint\n");
     else
     printf("%d %d\n",point, minsize);
    }
   system("pause");
   return 0;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:122619次
    • 积分:2343
    • 等级:
    • 排名:第15991名
    • 原创:115篇
    • 转载:11篇
    • 译文:3篇
    • 评论:13条
    常用链接
    最新评论