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;
}
本人还是新手 ,转载请注明来自Lvsi‘s home
浙公网安备 33010602011771号