博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ - 2253 Frogger(Dijkstra)
阅读量:5962 次
发布时间:2019-06-19

本文共 2286 字,大约阅读时间需要 7 分钟。

题目链接:http://poj.org/problem?id=2253

#include 
#include
#include
#include
#include
#define MAX 205#define INF 0x3f3f3f3fusing namespace std;/**************************************************************************************************************** 题意:题目的意思是,Freddy青蛙要找Fiona青蛙,Freddy青蛙在第1块石头那里,而Fiona青蛙在第2块石头那里。 现在Freddy青蛙要以周围的石头为中介跳向Fiona青蛙。考虑到有很多种跳法, Freddy青蛙想要选择一条路线,使它在这条路线上可以跳的最大距离,小于其它任何路线上可以跳的最大距离。 思路: 1,这题就是按着dijkstra写,写着写着觉得像是prim了。 2,其中dist[n]表示从1出发到达该点的某条路中的最大边,且比其它可能的路中的都小。 3,从dist[i]到dist[j], 就是要用 max(dist[id], Map[id][j]) 去更新 dist[j] 。 4,不是很理解为什么这么做。目的是求第一个点到第二点的最小生成树的最短距离!!! 待续。。。。。。 注意: 输出时要用 %.3f 不能用 %.3lf.****************************************************************************************************************/pair < int, int > Coor[MAX];double Map[MAX][MAX];double dist[MAX];int visit[MAX];double Distance( const pair< int, int > &A, const pair< int, int > &B ){ return sqrt(double((A.first-B.first)*(A.first-B.first)+(A.second-B.second)*(A.second-B.second)));}void dijkstra(int n){ memset(dist,INF,sizeof(dist)); memset(visit,0,sizeof(visit)); for(int i = 1;i <= n;i ++) dist[i]=Map[1][i]; dist[1]=0; visit[1]=1; for(int i = 1;i < n;i ++){ int id=1; double ans=INF; for(int j = 1;j <= n;j ++) if(!visit[j] && dist[j] < ans) ans=dist[id=j]; if(id == 1) return ; visit[id]=1; for(int j = 1;j <= n;j ++) if(!visit[j] && dist[j] > max(dist[id],Map[id][j])) dist[j]=max(dist[id],Map[id][j]); //更新和普通dijkstra不同 }}int main(){ int n; int cnt=1; while(cin>>n,n) { memset(Map,INF,sizeof(Map)); for(int i = 1;i <= n;i ++){ cin>>Coor[i].first>>Coor[i].second; for(int j = 1;j < i;j ++) Map[i][j]=Map[j][i]=Distance(Coor[i],Coor[j]); Map[i][i]=0; } dijkstra(n); printf("Scenario #%d\nFrog Distance = %.3f\n\n",cnt++,dist[2]); } return 0;}

 

转载于:https://www.cnblogs.com/Jstyle-continue/p/6351984.html

你可能感兴趣的文章
Java集合框架GS Collections具体解释
查看>>
洛谷 P2486 BZOJ 2243 [SDOI2011]染色
查看>>
数值积分中的辛普森方法及其误差估计
查看>>
Web service (一) 原理和项目开发实战
查看>>
跑带宽度多少合适_跑步机选购跑带要多宽,你的身体早就告诉你了
查看>>
深入理解Java的接口和抽象类
查看>>
Javascript异步数据的同步处理方法
查看>>
iis6 zencart1.39 伪静态规则
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>
度量时间差
查看>>
通过jsp请求Servlet来操作HBASE
查看>>
Shell编程基础
查看>>
Shell之Sed常用用法
查看>>
3.1
查看>>
校验表单如何摆脱 if else ?
查看>>
<气场>读书笔记
查看>>
Centos下基于Hadoop安装Spark(分布式)
查看>>