POJ 2253 Frogger(Dijkstra变形——最短路径最大权值)
题目链接:
http://poj.org/problem?id=2253
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
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
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
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
题意描述:
输入几个顶点的坐标
计算并输出从一号顶点到二号顶点所有最短路径中的最长距离
解题思路:
首先求出最短路径,Dijkstra算法不变,变化的是dis数组中存储的是所走的最短路径中最短的一段距离,在更新dis数组是加上判断条件即可。
属于最短路径最大权值,题目很经典,另还需了解
最短路径双重最小权值请参考:http://www.cnblogs.com/wenzhixin/p/7405802.html
最长路径最小权值请参考:http://www.cnblogs.com/wenzhixin/p/7336948.html
AC代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
struct Node
{
double x,y;
};
struct Node node[];
double e[][],dis[];
int main()
{
int n,book[],i,j,u,v,t=;
double x,y,inf=,mins;
while(scanf("%d",&n),n != )
{
for(i=;i<=n;i++)
for(j=;j<=n;j++)
e[i][j]=inf;
for(i=;i<=n;i++)
scanf("%lf%lf",&node[i].x,&node[i].y);
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
{
if(i != j)
e[i][j]=sqrt(fabs(node[i].x-node[j].x)*fabs(node[i].x-node[j].x)
+fabs(node[i].y-node[j].y)*fabs(node[i].y-node[j].y));
}
} for(i=;i<=n;i++)
dis[i]=e[][i];
memset(book,,sizeof(book));
book[]=;
for(i=;i<=n-;i++)
{
mins=inf;
for(j=;j<=n;j++)
{
if(!book[j] && dis[j] < mins)
{
mins=dis[j];
u=j;
}
}
book[u]=;
for(v=;v<=n;v++)
{
if(!book[v] && e[u][v] < inf)
{
if(dis[v] > max(dis[u],e[u][v]))
dis[v]=max(dis[u],e[u][v]);
}
}
}
printf("Scenario #%d\nFrog Distance = %.3lf\n\n",t++,dis[]);
}
return ;
}
使用Floyd算法更为精简
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std; const int inf = ;
const int maxn = ;
struct Node {
double x,y;
}node[]; double e[maxn][maxn]; double dis(Node a, Node b) {
return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
} int main()
{
int n,kase = ;
while(scanf("%d", &n) == && n) {
for(int i = ; i <= n ; i++) {
scanf("%lf%lf", &node[i].x, &node[i].y);
} for(int i = ; i <=n; i++) {
for(int j = ; j <= n; j++){
e[i][j] = i == j? : inf;
}
}
for(int i = ; i < n; i++) {
for(int j = i + ; j <= n; j++){
e[i][j] = e[j][i] = dis(node[i], node[j]);
}
} for(int k = ; k <= n; k++) {
for(int i = ; i <= n; i++) {
for(int j = ; j <= n; j++) {
e[i][j]=min(e[i][j], max(e[i][k],e[k][j]));
}
}
}
printf("Scenario #%d\nFrog Distance = %.3f\n\n", kase++, e[][]);
}
return ;
}
POJ 2253 Frogger(Dijkstra变形——最短路径最大权值)的更多相关文章
- NYOJ 1248 海岛争霸(Dijkstra变形——最短路径最大权值)
题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=1248 描述 神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等.加勒比 ...
- poj 2253 Frogger dijkstra算法实现
点击打开链接 Frogger Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 21653 Accepted: 7042 D ...
- POJ 2253 - Frogger - [dijkstra求最短路]
Time Limit: 1000MS Memory Limit: 65536K Description Freddy Frog is sitting on a stone in the middle ...
- POJ. 2253 Frogger (Dijkstra )
POJ. 2253 Frogger (Dijkstra ) 题意分析 首先给出n个点的坐标,其中第一个点的坐标为青蛙1的坐标,第二个点的坐标为青蛙2的坐标.给出的n个点,两两双向互通,求出由1到2可行 ...
- POJ 2253 Frogger(dijkstra 最短路
POJ 2253 Frogger Freddy Frog is sitting on a stone in the middle of a lake. Suddenly he notices Fion ...
- POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3790 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你 ...
- 最短路(Floyd_Warshall) POJ 2253 Frogger
题目传送门 /* 最短路:Floyd算法模板题 */ #include <cstdio> #include <iostream> #include <algorithm& ...
- POJ 2253 Frogger ,poj3660Cow Contest(判断绝对顺序)(最短路,floyed)
POJ 2253 Frogger题目意思就是求所有路径中最大路径中的最小值. #include<iostream> #include<cstdio> #include<s ...
- POJ 2253 Frogger【最短路变形——路径上最小的最大权】
链接: http://poj.org/problem?id=2253 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
随机推荐
- node学习心得
此次学习主要使用的是基于nodejs平台的web应用开发框架. 一.express的工程结构 1.bin/www:express的执行入口,存放可执行文件: 2.node_modules:存放pack ...
- 《Create Your own PHP Framework》笔记
前言 大力推荐该教程:<Create Your own PHP Framework> Symfony的学习蛮累的,官方文档虽然很丰富,但是组织方式像参考书而不是指南,一些不错的指导性文档常 ...
- Verilog code
1.计数,用于对精度不高的计数 always @(posedge clk or negedge rst_n) begin if(!rst_n) div_cnt <= 'd0; else div_ ...
- 在一个终端后台运行的进程在新的终端中使用job不会被发现
我在一个终端后台运行了一个程序.之后由于工作需要又新开了一个新的终端.在新的终端中,我想查看后台程序的运行状态,输入jobs时,发现没有后台任务运行.难道我的程序死掉了?我接着top了下,发现我的后台 ...
- oracle里的优化器
1.1 oracle里的优化器 RBO(Rule-Based-Optinizer):基于规则的优化器 CBO(Cost-Based-Optinizer): 基于成本的优化器 SQL语句执行过程 待执行 ...
- Gulp-静态网页模块化
前言: 在做纯静态页面开发的过程中,难免会遇到一些的尴尬问题.比如:整套代码有50个页面,其中有40个页面顶部和底部模块相同.那么同样的两段代码我们复制了40遍(最难受的方法).然后,这个问题就这样解 ...
- 一起学Linux01之环境安装
先说说为什么在公司里服务器用Linux系统而非Windows系统.其实吧,我感觉主要就是前者更靠谱,一个字就是稳!不说别的,就我现在写博客用的电脑没事给我黑个屏,断个网啥的.而且总有漏洞,保不齐就被黑 ...
- Presto集群部署
前言: 随着大数据的普及,大部分企业的大数据查询与统计渐渐出现瓶颈.虽说存储方面有分布式的HDFS,HBSE,MongoDB等可以应对,但是面对千万级别(1x10^7)界别的数据量查询时,以上组件也不 ...
- IBM的websphere MQ的c#使用(一)
接上篇的MQ配置.利用C#实现MQ消息的收发.源码 1.需要引入的dll是amqmdnet.dll 2.app.config配置 <?xml version="1.0" en ...
- 使用xUnit为.net core程序进行单元测试(中)
第一部分: http://www.cnblogs.com/cgzl/p/8283610.html 下面有一点点内容是重叠的.... String Assert 测试string是否相等: [Fact] ...