POj 2253 Frogger
时间:2022-05-08
本文章向大家介绍POj 2253 Frogger,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
这道题目的题意就纠结了很久,刚开始没有读懂,用Kruskal给过了,后来查解题报告可以用Dijkstra,于是就打算用这个算法写一写,松弛那里一直不知道怎么下手,后来搜了无数份解题报告还是看不懂松弛那里怎么实现的,最后和wjx讨论后才理清了思路,原来一直纠结错了地方,虽然算法用对了但是松弛那里却还紧握着最短路径
分析:首先, 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. 这句话是说,在一条路径中的的最长路必须是所有路径中最长路的最短路这就是Frogger distance
核心代码
for (j=1;j<=n;j++)
{
if(!p[j] && map[k][j]!=INF)
{
if(dist[j]>max(dist[k],map[k][j]))
dist[j]=max(dist[k],map[k][j]);
}
}
假设此时k所指的位置是A,j所指的是C,那么找出AB,AC的最大值2和BC4进行比较,显然最后dist[j]储存的边是4
#include<stdio.h>
#include<string.h>
#include<math.h>
const int MAXN=300;
const int INF=0x7fffffff;
int map[MAXN][MAXN];
int dist[MAXN];//记录最长的边
int n;
struct Point
{
int x,y;
}pnt[MAXN];
int max(int a,int b)
{
return a>b?a:b;
}
int min(int a,int b)
{
return a<b?a:b;
}
int _dist(Point a,Point b)
{
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
void Dijkstra()
{
int i,j,k;
int min;
int p[MAXN];
for (i=1;i<=n;i++)
{
p[i]=0;
dist[i]=map[1][i];//1是源点,具体的源点不同
}
dist[1]=0;
p[1]=1;
for (i=1;i<=n-1;i++)
{
min=INF;
k=0;
for (j=1;j<=n;j++)
{
if(!p[j] && dist[j]<min)
{
min=dist[j];
k=j;
}
}
if(k==0) return ;
p[k]=1;
for (j=1;j<=n;j++)
{
if(!p[j] && map[k][j]!=INF)
{
if(dist[j]>max(dist[k],map[k][j]))
dist[j]=max(dist[k],map[k][j]);
}
}
}
}
int main()
{
int cas=1,i,j;
while(scanf("%d",&n) && n)
{
for (i=1;i<=n;i++)
{
scanf("%d%d",&pnt[i].x,&pnt[i].y);
}
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{
if(i==j) map[i][j]=0;
else map[i][j]=INF;
}
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
{
map[i][j]=_dist(pnt[i],pnt[j]);
}
}
Dijkstra();
printf("Scenario #%dn",cas++);
printf("Frog Distance = %.3fnn",sqrt(1.0*dist[2]));
}
return 0;
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php+layui数据表格实现数据分页渲染代码
- thinkPHP框架乐观锁和悲观锁实例分析
- PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
- laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
- Laravel框架实现即点即改功能的方法分析
- PHP使用PDO实现mysql防注入功能详解
- laravel接管Dingo-api和默认的错误处理方式
- PHP接入微信H5支付的方法示例
- PHP中用Trait封装单例模式的实现
- laravel 解决Validator使用中出现的问题
- php文件上传原理与实现方法详解
- PHP常见的序列化与反序列化操作实例分析
- Laravel jwt 多表(多用户端)验证隔离的实现
- Laravel实现通过blade模板引擎渲染视图
- Laravel 验证码认证学习记录小结