poj2253 Frogger(最短路变型或者最小生成树)
/*
题意:就是源点到终点有多条的路径,每一条路径中都有一段最大的距离!
求这些路径中最大距离的最小值! Dijkstra, Floyd, spfa都是可以的!只不过是将松弛的条件变一下就行了! 想了一下,这道题用最小生成树做也可以啊,图总是连通的嘛!所以建一棵最小
生成树,然后dfs一下,从源点1,到终点2的路径上,查找边长最大的路径!
附上代码.....
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iomanip>
#define INF 0x3f3f3f3f*1.0
using namespace std;
struct node{
double x, y;
};
node nd[];
double g[][];
double d[];
int vis[];
int n; void Dijkstra(){
memset(vis, , sizeof(vis));
d[]=0.0;
int root=;
vis[]=;
for(int i=; i<=n; ++i)
d[i]=INF;
for(int j=; j<n; ++j){
int p;
double minL=INF;
for(int i=; i<=n; ++i){
double dist;
if(!vis[i] && d[i]> (dist=max(d[root], g[root][i])))
d[i]=dist;
if(!vis[i] && minL>d[i]){
minL=d[i];
p=i;
}
}
if(minL==INF) return;
root=p;
vis[root]=;
}
} int main(){
int cnt=;
while(cin>>n && n){
for(int i=; i<=n; ++i)
for(int j=; j<=n; ++j)
g[i][j]=INF;
for(int i=; i<=n; ++i){
double u, v;
cin>>nd[i].x>>nd[i].y;
for(int j=; j<i; ++j){
u=nd[i].x-nd[j].x;
v=nd[i].y-nd[j].y;
g[i][j]=g[j][i]=sqrt(u*u + v*v);
}
}
Dijkstra();
cout<<"Scenario #"<<++cnt<<endl<<"Frog Distance = ";
cout<<fixed<<setprecision()<<d[]<<endl;
cout<<endl;
}
return ;
} //最小生成树思想
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iomanip>
#define INF 0x3f3f3f3f*1.0
using namespace std;
struct node{
double x, y;
};
node nd[]; struct EDGE{
int u, v;
double dist;
};
EDGE edge[]; bool cmp(EDGE a, EDGE b){
return a.dist < b.dist;
} double g[][]; int vis[], f[];
int n; int getFather(int x){
return x==f[x] ? x : f[x]=getFather(f[x]);
} bool Union(int a, int b){
int fa=getFather(a), fb=getFather(b);
if(fa!=fb){
f[fa]=fb;
return true;
}
return false;
}
double dd;
bool dfs(int cur, double ddd){
vis[cur]=;
if(cur==){
dd=ddd;
return true;
}
for(int i=; i<=n; ++i)
if(g[cur][i]!=INF && !vis[i]){
if(ddd<g[cur][i]){
if(dfs(i, g[cur][i])) return true;
}
else if(dfs(i, ddd)) return true;
}
return false;
} int main(){
int cnt=;
while(cin>>n && n){
for(int i=; i<=n; ++i)
for(int j=; j<=n; ++j)
g[i][j]=INF;
int count=;
for(int i=; i<=n; ++i){
double u, v;
cin>>nd[i].x>>nd[i].y;
for(int j=; j<i; ++j){
u=nd[i].x-nd[j].x;
v=nd[i].y-nd[j].y;
edge[count].u=i;
edge[count].v=j;
edge[count++].dist=sqrt(u*u + v*v);
}
}
sort(edge, edge+count, cmp);
for(int i=; i<=n; ++i)
f[i]=i;
for(int i=; i<count; ++i){
int u, v;
if(Union(u=edge[i].u, v=edge[i].v))
g[u][v]=g[v][u]=edge[i].dist;
}
memset(vis, , sizeof(vis));
dfs(, 0.0);
cout<<"Scenario #"<<++cnt<<endl<<"Frog Distance = ";
cout<<fixed<<setprecision()<<dd<<endl;
cout<<endl;
}
return ;
}
poj2253 Frogger(最短路变型或者最小生成树)的更多相关文章
- POJ2253 Frogger —— 最短路变形
题目链接:http://poj.org/problem?id=2253 Frogger Time Limit: 1000MS Memory Limit: 65536K Total Submissi ...
- POJ2253 frogger 最短路 floyd
#include<iostream>#include<algorithm>#include<stdio.h>#include<string.h>#inc ...
- dijkstra(最短路)和Prim(最小生成树)下的堆优化
dijkstra(最短路)和Prim(最小生成树)下的堆优化 最小堆: down(i)[向下调整]:从第k层的点i开始向下操作,第k层的点与第k+1层的点(如果有)进行值大小的判断,如果父节点的值大于 ...
- POJ-2253 Frogger(最短路)
https://vjudge.net/problem/POJ-2253 题意 公青蛙想到母青蛙那里去,期间有许多石头,公青蛙可以通过这些石头跳过去.问至少要跳的最大距离,即所有路径上石头间的最大距离的 ...
- POJ 2253 Frogger ( 最短路变形 || 最小生成树 )
题意 : 给出二维平面上 N 个点,前两个点为起点和终点,问你从起点到终点的所有路径中拥有最短两点间距是多少. 分析 : ① 考虑最小生成树中 Kruskal 算法,在建树的过程中贪心的从最小的边一个 ...
- POJ-2253.Frogger.(求每条路径中最大值的最小值,最短路变形)
做到了这个题,感觉网上的博客是真的水,只有kuangbin大神一句话就点醒了我,所以我写这篇博客是为了让最短路的入门者尽快脱坑...... 本题思路:本题是最短路的变形,要求出最短路中的最大跳跃距离, ...
- POJ2253 Frogger(最短路)
题目链接. 题意: 从0号点,到1号点,找一条能通过的路,使得这条路中的最大的边,比其它所有可能的路中的边都小. 分析: 这题就是按着dijkstra写,写着写着觉得像是prim了. 其中d[n]表示 ...
- Frogger(最短路)
Frogger(poj2253) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31854 Accepted: 1026 ...
- poj2253 Frogger(Floyd)
题目链接 http://poj.org/problem?id=2253 题意 给出青蛙A,B和若干石头的坐标,现在青蛙A要跳到青蛙B所在的石头上,求出所有路径中最远那一跳的最小值. 思路 Floyd算 ...
随机推荐
- smartupload 上传与下载(转载)
前台: <form action="uploadimage.jsp" method="post" enctype="multipart/form ...
- GCC 源码编译 mpc mprf gmp 不用make(否则会有lib/libgmp.so: could not read symbols: File in wrong format等错误)
错误信息: lib/libgmp.so: could not read symbols: File in wrong formatcollect2: error: ld returned 1 exit ...
- Oracle Profile 使用
一.目的: Oracle系统中的profile可以用来对用户所能使用的数据库资源进行限制,使用Create Profile命令创建一个Profile,用它来实现对数据库资源的限制使用,如果把该prof ...
- pivotx的entry和page内容里的日期格式修改
欢迎转载opendevkit文章, 文章原始地址: http://www.opendevkit.com/?e=63 1. 文章发布时间的确定 如果服务器空间在国内还好说, 如果在国外的话, 文章编辑时 ...
- 分享:根据webservice WSDL地址自动生成java调用代码及JAR包
分享:根据webservice WSDL地址自动生成java调用代码及JAR包使用步骤:一.安装java 并配置JAVA_HOME 及 path二.安装ANT 并配置ANT_HOME三.解压WsdlT ...
- angular ng-repeat+sortable 拖拽demo
由于项目需求,需要使用angular 实现列表的增.删.改,并且列表支持拖拽. 看了下angular-ui 里面的sortable组件,使用起来也是非常简单,几十行代码就完成了所需功能. 我现在懒得想 ...
- python--同一mysql数据库下批量迁移数据
最近接手些mysql数据库维护,发现mysql在批量操作方面就是个渣渣啊,比起MS SQL SERVER简直就是“不可同日而语”. 咨询了下MySQL的高手,对于数据迁移这种问题,一种处理方式就是直接 ...
- JavaScript思维导图—流程控制
JavaScript思维导图-来自@王子墨http://julying.com/blog/the-features-of-javascript-language-summary-maps/
- C# socket编程实践——支持广播的简单socket服务器
在上篇博客简单理解socket写完之后我就希望写出一个websocket的服务器了,但是一路困难重重,还是从基础开始吧,先搞定C# socket编程基本知识,写一个支持广播的简单server/clie ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明
这里所说的高级接口是指面向通过认证的服务号开通的高级功能. 高级功能大致可以分类为: 用户接口 分组接口 客服接口(有别于之前介绍的多客服) 群发接口 多媒体接口 二维码接口 模板消息接口(不是所有账 ...