题意:青蛙跳石头,给出石头的坐标,然后要确定一条路径,使路径上的最大跨度最小,其实也是一道最短路问题,只要将更新条件从总距离最短改为最大跨度最小就行,即从某点到当前点路径上的最大跨度如果小于当前点原本记录下的最大跨度,或当前点还没有被访问过,无最大跨度,那么就更新它,然后以此为条件跑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. ASP.NET调用dos命令获取交换机流量

    protected void btn_Cisco_Click(object sender, EventArgs e) { try { string ip = txt_ip.Value; string ...

  2. 自适应界面开发总结——WPF客户端开发

    1.由于界面大小是变化的,所以必须有一个稳定不变的参考界面(即在一个标准的界面尺寸下进行WPF界面开发,比如:发票查验V3.0的美工设计尺寸——1024*740):   PS:在WPF的用户控件Xam ...

  3. qbxt联赛集训d1t3

    题意 给出一个长度为n的序列,求所有区间的区间最小值乘区间最大值的和.(n<=1e5) solution:

  4. django-rest-framework登陆认证

    # -*- coding: utf-8 -*- __author__ = 'YongCong Wu' # @Time : 2018/10/23 15:05 # @Email : : 192287802 ...

  5. Ubuntu中vi命令的编辑模式异常

    今天更改Ubuntu软件源的时候,进入源文件的编辑模式时,发现删除键和编辑都不能正常使用,百度之后,知道是由于Ubuntu预装的是vim-tiny,而我们需要使用vim-full.在此记录下该问题以便 ...

  6. layedit

    layedit.set({ uploadImage: { url: '' //接口url ,type: '' //默认post } }); //注意:layedit.set 一定要放在 build 前 ...

  7. python-day27--hashlib模块-摘要算法

    1.用途: # 文件校验 # 文件是否被改变# 登录密码 #不能解密,但可以“撞库” #加盐 hashlib.md5('nezha'.encode('utf-8')) 2. import hashli ...

  8. Superset

    Superset是一款可自助.可交互,可视化非常不错的产品 Superset is a data exploration platform designed to be visual, intuiti ...

  9. HttpServletResponse输出的中文乱码

    HttpServletResponse输出有两种格式,一种是字符流,一种是字节流. 1.字符流 // 这句话的意思,是让浏览器用utf8来解析返回的数据,即设置客户端解析的编码 response.se ...

  10. JavaScript学习总结(八)——JavaScript数组

    JavaScript中的Array对象就是数组,首先是一个动态数组,无需预先制定大小,而且是一个像Java中数组.ArrayList.Hashtable等的超强综合体. 一.数组的声明 常规方式声明: ...