题意:青蛙跳石头,给出石头的坐标,然后要确定一条路径,使路径上的最大跨度最小,其实也是一道最短路问题,只要将更新条件从总距离最短改为最大跨度最小就行,即从某点到当前点路径上的最大跨度如果小于当前点原本记录下的最大跨度,或当前点还没有被访问过,无最大跨度,那么就更新它,然后以此为条件跑dij或者spfa就行了

dij:

 #include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
#include<vector>
#include<math.h>
#define max(a,b) a>b?a:b
using namespace std;
typedef pair<double,int> pii;
const double INF=100000.0; int n; struct point{
int x,y;
}p[]; double g[][],dist[]; struct cmp{
bool operator()(pii a,pii b){
return a.first>b.first;
}
}; void dij(int s,int p){
int i;
for(i=;i<=n;i++){
dist[i]=INF;
}
dist[s]=;
priority_queue<pii,vector<pii>,cmp>q;
q.push(make_pair(,s));
while(!q.empty()){
pii u=q.top();
q.pop();
if(u.first>dist[u.second])continue;
for(i=;i<=n;i++){
double j=max(u.first,g[u.second][i]);
if(i!=u.second&&dist[i]>j){
dist[i]=j;
q.push(make_pair(dist[i],i));
}
}
}
printf("%.3lf\n\n",dist[p]);
} int main(){
int c=;
while(scanf("%d",&n)!=EOF&&n!=){
int i,j;
for(i=;i<=n;i++){
scanf("%d%d",&p[i].x,&p[i].y);
for(j=;j<=i;j++){
g[i][j]=g[j][i]=sqrt((p[i].x-p[j].x)*(p[i].x-p[j].x)*1.0+(p[i].y-p[j].y)*(p[i].y-p[j].y)*1.0);
}
}
printf("Scenario #%d\nFrog Distance = ",++c);
dij(,);
}
return ;
}

dij

spfa:

 #include<stdio.h>
#include<string.h>
#include<queue>
#include<math.h>
#define max(a,b) a>b?a:b
const double INF=10000.0;
using namespace std; struct point{
int x,y;
}p[]; double g[][],dist[];
bool vis[];
int n; void spfa(int s,int p){
int i;
for(i=;i<=n;i++){
dist[i]=INF;
}
memset(vis,,sizeof(vis));
dist[s]=;
queue<int>q;
q.push(s);
vis[s]=;
while(!q.empty()){
int u=q.front();
q.pop();
vis[u]=;
for(i=;i<=n;i++){
double j=max(dist[u],g[u][i]);
if(i!=u&&dist[i]>j){
dist[i]=j;
if(!vis[i]){
q.push(i);
vis[i]=;
}
}
}
}
printf("%.3lf\n\n",dist[p]);
} int main(){
int c=;
while(scanf("%d",&n)!=EOF&&n!=){
int i,j;
for(i=;i<=n;i++){
scanf("%d%d",&p[i].x,&p[i].y);
for(j=;j<=i;j++){
g[i][j]=g[j][i]=sqrt((p[i].x-p[j].x)*(p[i].x-p[j].x)*1.0+(p[i].y-p[j].y)*(p[i].y-p[j].y)*1.0);
}
}
printf("Scenario #%d\nFrog Distance = ",++c);
spfa(,);
}
return ;
}

spfa

poj2253 最短路的更多相关文章

  1. POJ-2253 Frogger---最短路变形&&最大边的最小值

    题目链接: https://vjudge.net/problem/POJ-2253 题目大意: 青蛙A想访问青蛙B,必须跳着石头过去,不幸的是,B所在的石头太远了,需要借助其他的石头,求从A到B的路径 ...

  2. POJ-2253(最短路变形+dijikstra算法+求解所有路径中所有最长边中的一个最小值)

    frogger POJ-2253 这题的代码特别像prim求解最小生成树的代码,其实两者本来也很像. 这里的d数组不再维护的起点到该点的最短距离了,而是路径中的最长距离. #include<io ...

  3. poj2253 最短路 floyd Frogger

    Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28825   Accepted: 9359 Descript ...

  4. poj2253 最短路变形

    题目连接:http://poj.org/problem?id=2253 Description Freddy Frog is sitting on a stone in the middle of a ...

  5. POJ-2253 Frogger(最短路)

    https://vjudge.net/problem/POJ-2253 题意 公青蛙想到母青蛙那里去,期间有许多石头,公青蛙可以通过这些石头跳过去.问至少要跳的最大距离,即所有路径上石头间的最大距离的 ...

  6. POJ-2253.Frogger.(求每条路径中最大值的最小值,最短路变形)

    做到了这个题,感觉网上的博客是真的水,只有kuangbin大神一句话就点醒了我,所以我写这篇博客是为了让最短路的入门者尽快脱坑...... 本题思路:本题是最短路的变形,要求出最短路中的最大跳跃距离, ...

  7. POJ2253 Frogger —— 最短路变形

    题目链接:http://poj.org/problem?id=2253 Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissi ...

  8. poj2253 Frogger(最短路变型或者最小生成树)

    /* 题意:就是源点到终点有多条的路径,每一条路径中都有一段最大的距离! 求这些路径中最大距离的最小值! Dijkstra, Floyd, spfa都是可以的!只不过是将松弛的条件变一下就行了! 想了 ...

  9. POJ2253 Frogger(最短路)

    题目链接. 题意: 从0号点,到1号点,找一条能通过的路,使得这条路中的最大的边,比其它所有可能的路中的边都小. 分析: 这题就是按着dijkstra写,写着写着觉得像是prim了. 其中d[n]表示 ...

随机推荐

  1. 雷林鹏分享:C# 命名空间(Namespace)

    C# 命名空间(Namespace) 命名空间的设计目的是为了提供一种让一组名称与其他名称分隔开的方式.在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突. 定义命名空间 命名 ...

  2. 20170814xlVBA PowerPoint分类插图加说明

    Public Sub AddPictures() Dim ppApp As PowerPoint.Application Set ppApp = New PowerPoint.Application ...

  3. 关于"架构"

    杨光辉说,在构架系统的早期可能不会更多地考虑架构,主要是在做技术选型,首先是编程语言的选择.对于编程语言选择,当前主流编程语言有很多,有面向对象语言.传统式语言等.做这个选择主要根据人员知识储备,包括 ...

  4. Executors类的newFixedThreadPool, newCachedThreadPool, newScheduledThreadPool

    Executors 类对 ThreadPoolExecutor 的构造函数进行了封装,使用该类可方便地创建线程池. 1. newFixedThreadPool public static Execut ...

  5. PHP:第三章——PHP中控制函数的函数

    <pre> <?php header("Content-Type:text/html;charset=utf-8"); /******************** ...

  6. PHP:php中的双引号和单引号的区别

    双引号: $a="369"; $b="$a"; echo $b;//输出:369 单引号: $a="369"; $b='$a'; echo ...

  7. WEBSERVICE-CXF服务端代码

    Spring + cxf 发布webservice 依赖的jar包 WEB.xml的配置 applicationContext.xml配置   部署在Tomcat中启动   出现的问题         ...

  8. Openwrt Udev Configure(3)

    1      Scope of Document This document describes how to write udev script, when enum usb device mayb ...

  9. ETL设计详解

    ETL是BI项目最重要的一个环节,通常情况下ETL会花掉整个项目的1/3的时间,ETL设计的好坏直接关接到BI项目的成败.ETL也是一个长期的过程,只有不断的发现问题并解决问题,才能使ETL运行效率更 ...

  10. Python中简化的验证码功能实现

    #!/usr/bin/env python # _*_ encoding:utf-8 _*_ # author:snate import random def generate_auth_code() ...