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 }
View Code

 

posted on 2013-09-09 11:25  码农之上~  阅读(130)  评论(0编辑  收藏  举报

导航