ZOJ 1942

来源:互联网 发布:猪八戒淘宝刷流量 编辑:程序博客网 时间:2024/05/18 03:58

 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1942

类似最短路算法,但不是求最短路

题意:给你一些石头的坐标,求能从起点到终点的所有路径中,最大的一次跳跃中的最小值

即:每条从起点到终点的路径中,都有一次跳跃是最大的,求的是所有路径中最大跳跃的最小值

#include<stdio.h>#include<string.h>#include<math.h>#define M 250#define oo 0xfffffffint n;bool v[M];int dis[M];//保存从起点跳到任意点之间所有路径最大的一次跳跃长度的最小值//求最短路则保存的是起点到任意点的最短距离 int que[M*M];int Dis[M][M];//任意两点间的距离 struct point{int x;int y;}po[M];int getlen(int i,int j){return (po[i].x-po[j].x)*(po[i].x-po[j].x)+(po[i].y-po[j].y)*(po[i].y-po[j].y);}int max(int a,int b){if(a>b) return a;return b;}void SPFA(){int L=0,R=0,i,p;memset(v,false,sizeof(v));for(i=1;i<=n;i++)dis[i]=oo;dis[1]=0;v[1]=true;que[R++]=1;while(L<R){p=que[L++];v[p]=false;for(i=1;i<=n;i++){int temp=max(dis[p],Dis[p][i]);if(dis[i]>temp){dis[i]=temp;if(!v[i]){que[R++]=i;v[i]=true;}}}}}int main(){int i,j;int cas=1;while(scanf("%d",&n)&&n){for(i=1;i<=n;i++)scanf("%d%d",&po[i].x,&po[i].y);for(i=1;i<=n;i++)for(j=1;j<=i;j++)Dis[i][j]=Dis[j][i]=getlen(i,j);SPFA();printf("Scenario #%d\n",cas++);printf("Frog Distance = %.3lf\n\n",sqrt(dis[2]));}return 0;}

 

 

这题同样可以用类似最小生成树算法,下面是代码:

#include<stdio.h>#include<string.h>#include<math.h>#define M 250#define oo 0xfffffffint n;bool v[M];int MIN[M];int dis[M][M];struct point{int x,y;}po[M];int Getlen(int i,int j){return (po[i].x-po[j].x)*(po[i].x-po[j].x)+(po[i].y-po[j].y)*(po[i].y-po[j].y);}int max(int a,int b){if(a>b) return a;return b;}int Dijstra(){int i,j,p;int min;memset(v,false,sizeof(v));for(i=1;i<=n;i++)MIN[i]=dis[1][i];v[1]=true;for(i=1;i<n;i++){min=oo;for(j=1;j<=n;j++){if(!v[j]&&MIN[j]<min){min=MIN[j];p=j;}}if(p==2)return min;v[p]=true;for(j=1;j<=n;j++){if(!v[j]&&MIN[j]>max(MIN[p],dis[p][j]))MIN[j]=max(MIN[p],dis[p][j]);}}}int main(){int i,j;int cas=1;int ans;while(scanf("%d",&n)&&n){for(i=1;i<=n;i++)scanf("%d%d",&po[i].x,&po[i].y);for(i=1;i<=n;i++)for(j=1;j<=i;j++)dis[i][j]=dis[j][i]=Getlen(i,j);ans= Dijstra();printf("Scenario #%d\n",cas++);printf("Frog Distance = %.3lf\n\n",sqrt(ans));}return 0;}



 

原创粉丝点击