poj2253 最小生成树中的最大边 prim
来源:互联网 发布:浪潮java面试题 编辑:程序博客网 时间:2024/05/29 17:56
Frogger
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 30620 Accepted: 9875
Description
Freddy Frog is sitting on a stone in the middle of a lake. Suddenly he notices Fiona Frog who is sitting on another stone. He plans to visit her, but since the water is dirty and full of tourists' sunscreen, he wants to avoid swimming and instead reach her by jumping.
Unfortunately Fiona's stone is out of his jump range. Therefore Freddy considers to use other stones as intermediate stops and reach her by a sequence of several small jumps.
To execute a given sequence of jumps, a frog's jump range obviously must be at least as long as the longest jump occuring in the sequence.
The frog distance (humans also call it minimax distance) between two stones therefore is defined as the minimum necessary jump range over all possible paths between the two stones.
You are given the coordinates of Freddy's stone, Fiona's stone and all other stones in the lake. Your job is to compute the frog distance between Freddy's and Fiona's stone.
Unfortunately Fiona's stone is out of his jump range. Therefore Freddy considers to use other stones as intermediate stops and reach her by a sequence of several small jumps.
To execute a given sequence of jumps, a frog's jump range obviously must be at least as long as the longest jump occuring in the sequence.
The frog distance (humans also call it minimax distance) between two stones therefore is defined as the minimum necessary jump range over all possible paths between the two stones.
You are given the coordinates of Freddy's stone, Fiona's stone and all other stones in the lake. Your job is to compute the frog distance between Freddy's and Fiona's stone.
Input
The input will contain one or more test cases. The first line of each test case will contain the number of stones n (2<=n<=200). The next n lines each contain two integers xi,yi (0 <= xi,yi <= 1000) representing the coordinates of stone #i. Stone #1 is Freddy's stone, stone #2 is Fiona's stone, the other n-2 stones are unoccupied. There's a blank line following each test case. Input is terminated by a value of zero (0) for n.
Output
For each test case, print a line saying "Scenario #x" and a line saying "Frog Distance = y" where x is replaced by the test case number (they are numbered from 1) and y is replaced by the appropriate real number, printed to three decimals. Put a blank line after each test case, even after the last one.
Sample Input
20 03 4317 419 418 50
Sample Output
Scenario #1Frog Distance = 5.000Scenario #2Frog Distance = 1.414
Source
题目大意,有两只青蛙,分别在两个石头上,青蛙A想要到青蛙B那儿去,他可以直接跳到B的石头上,也可以跳到其他石头上,再从其他石头跳到B那儿,求青蛙从A到B的所有路径中最小的Frog Distance,我们定义Frog Distance为从A到B的一条路径中所跳的最大距离,例如,如果从A到B某条路径跳的距离是2,5,6,4,则Frog Distance就是6,题目输入的第一行代表石头的个数,当个数为0时结束程序,接着有n行,其中第2,3行分别代表A,B青蛙的坐标,其他n-2行分别代表空的石头的坐标,输出一个小数(保留三位),具体格式参见样例,注意没输出一个答案还要再空一行。Ulm Local 1997
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#define INF 100000000.0using namespace std;struct node{ int x,y;} point[300];double chuli(node p1,node p2){ return pow((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y),1.0/2);}double Map[1200][1200];double a[2000];double low[2000];int next[2000];int n;int Prim(int u0){ int i,j; for(i=0; i<n; i++) { low[i]=Map[u0][i]; next[i]=u0; } next[u0]=-1; double max=0.0; for(i=0; i<n-1; i++) { double min=INF; int v=-1; for(j=0; j<n; j++) { if(next[j]!=-1&&low[j]<min) { min=low[j]; v=j; } } if(min>max) max=min; //本体的核心 if(a[v]<0.0000001) // { a[v]=max; if(v==1) break; } if(v!=-1) { next[v]=-1; for(j=0; j<n; j++) { if(next[j]!=-1 &&Map[v][j]<low[j]) { low[j]=Map[v][j]; next[j]=v; } } } } printf("Frog Distance = %.3f\n",a[1]); //poj不支持 %lf}int main(){int Case=1; while(~scanf("%d",&n)) { if(n==0)break; for(int i=0; i<n; i++) { scanf("%d%d",&point[i].x,&point[i].y); } for(int i=0; i<n; i++) a[i]=0.0; for(int i=0; i<n; i++) for(int j=0; j<n; j++) { Map[i][j]=chuli(point[i],point[j]); }printf("Scenario #%d\n",Case++); Prim(0); printf("\n"); //cout<<"*"; }}
#include<iostream>//#include<cstring>#include<cstdio>#include<cmath>#include<queue>#define INF 0x3f3f3f3fusing namespace std;struct node{ int x,y;} p[1100];int a[1100][1100];int vis[1100],n;int low[1100];int prim(){ for(int i=0; i<n; i++) { vis[i]=0; low[i]=a[0][i]; } low[0]=0; int Max=-1; vis[0]=1; for(int i=0; i<n-1; i++) { int Min=INF,k=-1; for(int j=0; j<n; j++) { if(!vis[j]&&low[j]<Min) { Min=low[j]; k=j; } } if(Max<Min) Max=Min; if(k==1) break; if(k!=-1) { vis[k]=1; for(int j=0; j<n; j++) { if(!vis[j]&&low[j]>a[k][j]) low[j]=a[k][j]; } } } double t=sqrt(Max*1.0); printf("Frog Distance = %.3f\n\n",t); return 0;}int main(){ string str; str="jsdfsd"; int Cas=0; while(~scanf("%d",&n),n) { for(int i=0; i<n; i++) { scanf("%d%d",&p[i].x,&p[i].y); } for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { a[i][j]=(p[i].x-p[j].x)*(p[i].x-p[j].x)+(p[i].y-p[j].y)*(p[i].y-p[j].y); } } printf("Scenario #%d\n",++Cas); prim(); } return 0;}
2 0
- poj2253 最小生成树中的最大边 prim
- prim算法求最小生成树的最大边--poj2253
- POJ2253 Frogger (最小生成树之prim)
- poj 2485 最小生成树中的最大边 prim
- poj2253——Frogger(最小生成树,prim算法)
- poj2253 frog之最小生成树prim解法
- poj2253 Frogger(最小生成树求最大边/最短单源路径变形)
- poj2253 Frogger 克鲁斯卡尔变种算最小生成树最大边
- poj 2485 Highways prim最小生成树 基础 球最小生成树中得最大边
- poj2253 求生成树的最大边的最小值
- poj2253 求生成树的最大边最小值
- POJ2253--Frogger--最小生成树Kruskal
- poj2253-Frogger (最小生成树)
- poj2253 最小生成树最大权
- Prim最小生成树
- 最小生成树 prim
- 最小生成树 Prim
- 最小生成树-Prim
- win10系统设置锁屏界面时不能成功的解决办法
- 打开Myeclipse时进度条只进行十分之一就闪退的解决办法
- 虚函数
- ObjC第六节:OC常用类
- Java中各种修饰符与访问修饰符的说明
- poj2253 最小生成树中的最大边 prim
- ssh 反向隧道
- 图结构练习——BFSDFS——判断可达性--------BFS——从起始点到目标点的最短步数
- OC类的深入研究
- 【Maven】跳过test测试直接进行编译打包
- SVM 多分类 -SVM分类opencv3.0源代码
- (一二四)tableView的多组数据展示和手动排序
- BZOJ 1695 [Usaco2007 Demo]Walk the Talk 链表+数学
- python笔记:深刻理解Python中的元类(metaclass)