poj-2253 Frogger(dijkstra变形)

来源:互联网 发布:日本人爱干净 知乎 编辑:程序博客网 时间:2024/05/21 04:44

这道题有助于理解迪杰斯特拉的本质,感觉该算法更像是一种遍历图的思想而不仅仅是用来求最短路


题意是,每一条路径都有一个跳的最大值,比如在某一条路径中,跳的距离依次是2 3 1 6 5 那么这个最大值就是6. 任务是找出所有路径的最大值中的最小值


用d[j]表示从起始点到该点所有路径最大值中的最小值。


#include<math.h>#include<stdio.h>#include<string.h>#define max(a,b) (a>=b?a:b)#define MAX 1000 int n, x, y;int T=1;int mark[MAX];double d[MAX];struct point{int x, y;};struct point po[MAX];void getpo(){int i;for(i=1;i<=n;i++){scanf("%d %d",&x,&y);po[i].x=x;po[i].y=y;}}double getdis(struct point a,struct point b){double dis=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));return dis;}void dijkstra(){int k, i, j;double min;memset(mark,0,sizeof(mark));for(i=1;i<=n;i++)    d[i]=MAX;d[1]=0;for(i=1;i<=n;i++){min=MAX;for(j=1;j<=n;j++){if(!mark[j]&&min>d[j]){min=d[j];k=j;}}if(k==2) break;mark[k]=1;for(j=1;j<=n;j++){if(!mark[j] && d[j]>max(getdis(po[k],po[j]),d[k]))    d[j]=max(getdis(po[k],po[j]),d[k]);}}printf("Scenario #%d\nFrog Distance = %.3lf\n\n",T++,d[2]);}int main(){while(scanf("%d",&n)&&n!=0){getpo();dijkstra();}return 0;}

但是不知道为什么这道题用c过了用c++就wa...

原创粉丝点击