Frogger(最短路)
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 31854 | Accepted: 10262 |
Description
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
Output
Sample Input
2
0 0
3 4 3
17 4
19 4
18 5 0
Sample Output
Scenario #1
Frog Distance = 5.000 Scenario #2
Frog Distance = 1.414 大意:
从A到B有多条路径,先取每条路径的最大值,然后再求出它们的最小值。
比如三条路径,1 3 4;2 5,1 2 1;最大值分别为4,5,2,最小值就是2 使用DIjkstra算法的思路,lowcost[]此时不再是最短路径,而是从起点到结点i的所有路径的最大边中的最小值,算法中维护s集合,从未更新的结点中取出最小节点,不断向外进行扩展。
扩展方法:if(max(lowcost[u],w[u][v])<lowcost[v])
lowcost[v]=max(lowcost[u],w[u][v])<lowcost[v];
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
#define Max 300+10
#define MMax 0x3f3f3f3f
struct point
{
int x,y;
};
double w[Max][Max];
double lowcost[Max];
bool vis[Max];
point p[Max];
int n;
double dis(point a,point b)
{
return sqrt((double)(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
void Dijkstra(int s)
{
for(int i=;i<n;i++){
lowcost[i]=MMax; /*memset按照字节来赋值,但是int是四个字节*/
vis[i]=;
}
lowcost[]=;
while()
{
int u=-,v;
int i,j;
double Min=MMax;
for(v=;v<n;v++)
if(!vis[v]&&(u==-||lowcost[v]<lowcost[u]))
{
u=v;
}
if(u==-) break;
vis[u]=;
for(v=;v<n;v++)
if(!vis[v]&&max(lowcost[u],w[u][v])<lowcost[v])
lowcost[v]=max(lowcost[u],w[u][v]);
}
return;
}
int main()
{
int i,j,k,count=;
//freopen("in.txt","r",stdin);
while(cin>>n&&n)
{
memset(w,,sizeof());
for(i=;i<n;i++)
scanf("%d%d",&p[i].x,&p[i].y);
for(i=;i<n-;i++)
for(j=i+;j<n;j++)
w[i][j]=w[j][i]=dis(p[i],p[j]);
Dijkstra();
printf("Scenario #%d\nFrog Distance = %0.3lf\n\n",++count,lowcost[]);
}
}
Frogger(最短路)的更多相关文章
- POJ2253 Frogger —— 最短路变形
题目链接:http://poj.org/problem?id=2253 Frogger Time Limit: 1000MS Memory Limit: 65536K Total Submissi ...
- POJ 2253 Frogger (最短路)
Frogger Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 28333 Accepted: 9208 Descript ...
- B - Frogger 最短路变形('最长路'求'最短路','最短路'求'最长路')
http://poj.org/problem?id=2253 题目大意: 有一只可怜没人爱的小青蛙,打算去找他的女神青蛙姐姐,但是池塘水路不能走,所以只能通过蹦跶的形式到达目的地,问你从小青蛙到青蛙姐 ...
- POJ 2253 Frogger ( 最短路变形 || 最小生成树 )
题意 : 给出二维平面上 N 个点,前两个点为起点和终点,问你从起点到终点的所有路径中拥有最短两点间距是多少. 分析 : ① 考虑最小生成树中 Kruskal 算法,在建树的过程中贪心的从最小的边一个 ...
- POJ 2253 Frogger -- 最短路变形
这题的坑点在POJ输出double不能用%.lf而要用%.f...真是神坑. 题意:给出一个无向图,求节点1到2之间的最大边的边权的最小值. 算法:Dijkstra 题目每次选择权值最小的边进行延伸访 ...
- POJ 2253 Frogger 最短路 难度:0
http://poj.org/problem?id=2253 #include <iostream> #include <queue> #include <cmath&g ...
- poj 2253 Frogger(最短路 floyd)
题目:http://poj.org/problem?id=2253 题意:给出两只青蛙的坐标A.B,和其他的n-2个坐标,任一两个坐标点间都是双向连通的.显然从A到B存在至少一条的通路,每一条通路的元 ...
- POJ2253 frogger 最短路 floyd
#include<iostream>#include<algorithm>#include<stdio.h>#include<string.h>#inc ...
- 最短路(Floyd_Warshall) POJ 2253 Frogger
题目传送门 /* 最短路:Floyd算法模板题 */ #include <cstdio> #include <iostream> #include <algorithm& ...
随机推荐
- IOS 推送原理
最近两天在研究ios的消息推送机制.研究这个东西,还是充满兴趣的. Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指某个iPhone软件的Push服务器,这篇文章 ...
- 如何使用NSFetchedResultsController-备
不知不觉我们已经来到了Core Data系列教程的最后一部分了,在这里我们要讨论如何使用NSFetchedResultsController来优化我们的应用,提高应用的运行速度,减少其内存占用. 你是 ...
- Driver Signing changes in Windows 10
Driver Signing changes in Windows 10 RATE THIS 1 Apr 2015 1:28 PM 39 Beginning with the release of ...
- PowerShell_零基础自学课程_8_高级主题:WMI对象和COM组件
本系列文章从最初的初识开始,基本上可以完成一些简单的系统管理了,为了更方便的管理系统,同时为了更好的发掘系统的性能,就需要用到系统提供 的一些高级特性,在Windows Server系列的OS中,如果 ...
- 使用opencv传中文文件崩溃
这个问题经过我的调试发现: 程序是在 while (*at && !isdigit(*at)) at++; 这个语句时crash的,但是跟进去是isdigit的问题,因为变量a ...
- 一道有关球赛队员分配的C++程序题目
题目描述: 两个球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已经抽签决定比赛名单. 有人向队员打听比赛安排的名单.a说他不和x比,c说他不和x,z比,请编程找出三队赛手的名单. ...
- 简单的div蒙层
;;;; } $("#userLogin").click(function () { var heights = (parseInt($(window). ...
- Divide Two Integers 解答
Question Divide two integers without using multiplication, division and mod operator. If it is overf ...
- hdu3410-Passing the Message(RMQ,感觉我写的有点多此一举。。。其实可以用单调栈)
What a sunny day! Let’s go picnic and have barbecue! Today, all kids in “Sun Flower” kindergarten ar ...
- OPStackComputeNodeMaintain
1,yum -y install openstack-nova-compute计算节点配置完成后 其配置文件默认非注释行内容如下;