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