题意:一只青蛙找到另外一只青蛙,不过可以通过其它的石头跳到目标青蛙的位置去,其中,输入数据的时候第一组数据是第一只青蛙的位置,第二组是目标青蛙的位置,其它的为石头的位置
思路:dijkstra算法的一种小小的变形,做法还是一样的
Tips:POJ上的双精度浮点型输出竟然是%f输出害的我一直错,或者是编译错误,恼啊!
AC代码:
#include<cstdio> #include<cmath> #include<algorithm> using namespace std; #define maxn 100000000 #define N 212 struct p { int x,y; }; p point[N]; int n; double d[N]; double dis(p a,p b) { return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } void dijkstra() { double minn; int i,j,vis[N],v; for(i=1;i<=n;i++) { vis[i]=0; d[i]=maxn; } v=1; d[1]=0; for(i=1;i<=n;i++) { minn=maxn; for(j=1;j<=n;j++) { if(!vis[j]&&d[j]<minn) { minn=d[j]; v=j; } } vis[v]=1; if(v==2)break; for(j=1;j<=n;j++) if(!vis[j] && d[j]>max(d[v],dis(point[v],point[j]))) d[j]=max(d[v],dis(point[v],point[j])); } } int main() { int cnt=1; while(scanf("%d",&n)!=EOF) { if(n==0)break; for(int i=1;i<=n;i++) scanf("%d %d",&point[i].x,&point[i].y); dijkstra(); printf("Scenario #%d\nFrog Distance = %.3f\n",cnt++,d[2]); printf("\n"); } return 0; }
POJ 2253 Frogger,布布扣,bubuko.com
时间: 2024-10-21 13:00:16