POJ 1603 Risk

水题,题目比较长,描述的题意太长。

CODE:

 

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using  namespace std;
#define MAXN 25
#define INF 0x3f3f3f3f

int n, times;
long  long d[MAXN][MAXN];

void init()
{
     for( int i =  1 ; i <=  20 ; i++)
    {
        for( int j =  1 ; j <=  20 ; j++)
       {
           if(i == j) d[i][j] =  0;
           else d[i][j] = INF;
       }
    }
}

void Floyd()
{
      int u, v;
      for( int k =  1;  k <=  20 ; k++)
      for( int i =  1 ; i <=  20 ; i++)
         for( int j =  1 ; j <=  20 ; j++)
              d[i][j] = min(d[i][j], d[i][k]+d[k][j]);
     scanf( " %d ", &n);
     printf( " Test Set #%d\n ", ++times);
      for( int i =  1 ; i <= n ; i++)
     {
        scanf( " %d%d ", &u , &v);
        printf( " %d to %d: %lld\n " , u , v , d[u][v]);
     }
     printf( " \n ");
}

int main()
{
     int x , a;
    times =  0;
     while(~scanf( " %d ", &x))
    {
         init();
          for( int i =  1 ; i <= x ; i++)
         {
            scanf( " %d ", &a);
            d[ 1][a] = d[a][ 1] =  1;
         }
          for( int i =  2 ; i <=  19 ; i++)
         {
            scanf( " %d ", &x);
             for( int j =  1 ; j <= x ; j++)
            {
               scanf( " %d ", &a);
               d[i][a] = d[a][i] =  1;
            }
         }
         Floyd();
    }
     return  0;
}

 

你可能感兴趣的:(poj)