LeeBlog

导航

HDU 1596 find the safest road

这题就是一最短路,不过,在这里是找"最长路",所以在初始化时不能赋值为0x7fffffff,而赋为0,还有存贮是记得用double型

#include<stdio.h>
int n,q,des[1005],s,e;
double map[1005][1005],dis[1005];
double Dij( )
{
       for( int i = 0; i <= n; ++i )
            des[i] = 0,dis[i] = 0;
       dis[s] = 1;
       for( int i = 1; i <= n; ++i )
       {
            int pos = -1;
            double max = -1;
            for( int j = 1; j <= n; ++j )
                 if( !des[j] && dis[j] > max )
                     max = dis[j],pos = j;
            if( pos == e )
                return dis[e];
            des[pos] = 1;
            for( int j = 1; j <= n; ++j )
                 if( !des[j] && map[pos][j] != 0 )
                     if( dis[pos] * map[pos][j] > dis[j] )
                         dis[j] = map[pos][j] * dis[pos];
        }
        return 0;
}
int main( )
{
    while( scanf( "%d",&n ) != EOF )
    {
           for( int i = 1; i <= n; ++i )
                for( int j = 1; j <= n; ++j )
                     map[i][j] = 0,scanf( "%lf",&map[i][j] );
           scanf( "%d",&q );
           while( q-- )
           {
                  scanf( "%d%d",&s,&e );
                  double res = Dij( );
                  if( res != 0 )
                      printf( "%.3lf\n",res );
                  else
                      puts( "What a pity!" );
           }
           }
    return 0;
}

posted on 2011-05-03 07:52  LeeBlog  阅读(222)  评论(0编辑  收藏  举报