Frogger


POJ - 2253 
題目意思大體就是找一條路,這條路中每一跳都盡量的小。找到這條路中最大的邊

題目大意求青蛙由起點跳到終點的過程中,在所有的路徑中的最大步伐中的最小步伐。題目簡單。用Dijkstra算法解,但並非是求最小路徑或最  

小路徑長度。這里是Dijkstra算法的變體,結合貪心算法的思想,在走每一步時,選取距離最小(即步伐最小)的那一步走,每一次走都是在上一步  

的基礎之上走的,用一個變量u記錄每次通過的結點,再用一個變量記錄已經走了的路徑中的最大步伐,當u等於終點結點的編號時,就停止,輸出最大步伐。

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<cstdio>
 6 using namespace std;
 7 
 8 const int INF=0x3f3f3f3f;
 9 int book[1005];
10 double dis[1005],e[1005][1005];
11 
12 struct note
13 {
14     int x,y;
15 }p[1005];
16 
17 double length(note a,note b)
18 {
19     return sqrt( (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y) );
20 }
21 
22 int main()
23 {
24     int n,cas=0;
25     while(cin>>n && n)
26     {
27         cas++;
28         memset(book,0,sizeof(book));
29         memset(dis,0,sizeof(dis));
30         for(int i=1;i<=n;i++)
31             for(int j=1;j<=n;j++)
32                 e[i][j]=INF;
33         for(int i=1;i<=n;i++)
34             cin>>p[i].x>>p[i].y;
35         
36         for(int i=1;i<=n;i++)
37             for(int j=1;j<=n;j++)
38                 e[i][j] = length(p[i],p[j]);
39                 
40         for(int i=1;i<=n;i++)
41             dis[i]= e[1][i];
42         dis[1]=0;
43         book[1]=1;
44         
45         double maxn=0;
46         for(int i=2;i<=n;i++)
47         {
48             double minn=INF;
49             int u=1; //******
50             for(int j=1;j<=n;j++)
51             {
52                 if( !book[j] && dis[j]<minn)
53                 {
54                     minn=dis[j];
55                     u=j;
56                 }
57             }
58             
59             if(maxn<minn)  maxn=minn;
60             if(u==2) break; //如果最短的是第2個點  則直接就到目的地了 
61             book[u]=1;
62             
63             for(int v=1;v<=n;v++)
64             {
65                 if(!book[v] && dis[v]> e[u][v])
66                     dis[v]= e[u][v];
67             }
68         }
69         
70         printf("Scenario #%d\nFrog Distance = %.3f\n\n",cas,maxn);
71     }
72 }

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM