POJ 2253 Frogger
这道题就没什么好说的啦,直接dijstra最短路。
把所有石头之间的距离求出来制图,dijstra最短路。
上代码
1 #include<stdio.h> 2 #include<iostream> 3 using namespace std; 4 #include<queue> 5 #include<math.h> 6 #include<algorithm> 7 #include<string.h> 8 #include<stdlib.h> 9 10 #define repA(p,q,i) for( int (i)=(p); (i)!=(q); ++(i) ) 11 #define repAE(p,q,i) for( int (i)=(p); (i)<=(q); ++(i) ) 12 #define repD(p,q,i) for( int (i)=(p); (i)!=(q); --(i) ) 13 #define repDE(p,q,i) for( int (i)=(p); (i)>=(q); --(i) ) 14 #define range 210 15 16 int N; 17 float x[range],y[range] ; 18 float maps[range][range] ; 19 int f[range]; 20 bool confirm[range]; 21 float prim() ; 22 float prim(); 23 24 int main() 25 { 26 int order=1; 27 while( scanf("%d",&N) != EOF ) 28 { 29 if(N==0) break; 30 float xi,yi,tx,ty; 31 repA(0,N,i) //0 is the source , 1 is the destination 32 scanf("%f%f",&x[i],&y[i]) ; 33 repA(0,N,i) 34 repA(i+1,N,j) 35 { 36 tx = x[i]-x[j] ; ty = y[i] - y[j] ; 37 maps[i][j]=maps[j][i]=sqrt( tx*tx + ty*ty ) ; 38 } 39 printf("Scenario #%d\n",order++ ) ; 40 printf("Frog Distance = %.3f\n",prim() ); 41 printf("\n"); 42 } 43 return 0; 44 } 45 46 float prim() 47 { 48 repA(0,range,i) 49 confirm[i] = true ; 50 repA(0,N,i) f[i]=0; 51 confirm[0] = false ; 52 float minJump=0; 53 int next ; 54 float MINX; 55 repA(1,N,i) 56 { 57 MINX = 0x3f3f3f3f ; 58 repA(1,N,j) 59 if( confirm[j] && maps[0][j] < MINX ) 60 { MINX = maps[0][j] ; next = j ; } 61 if( maps[f[next] ][next] > minJump ) minJump = maps[f[next] ][next] ; 62 //printf("%d %d\n",next,f[next]); 63 if( next == 1 ) break; 64 confirm[next] = false ; 65 repA(1,N,j) 66 if( confirm[j] && ( maps[next][j] ) < maps[0][j] ) 67 { maps[0][j] = maps[next][j] ; 68 f[j] = next; } 69 70 } 71 return minJump ; 72 }
To Be The Best Of Yourself