Skiing POJ 3037 很奇怪的最短路问题
Skiing POJ 3037 很奇怪的最短路问题
题意
题意:你在一个R*C网格的左上角,现在问你从左上角走到右下角需要的最少时间.其中网格中的任意两点的时间花费可以计算出来.
解题思路
这个需要发现一个规律,就是从左上角到其他任意一点,无论选择哪条路径,到达该点的速度都是固定的。
例如对于下面的一个矩阵:
1 5 3
6 3 5
2 4 3
可以发现我们想要计算数值为2的点的速度的话,$$v_2=v_12^{1-2}$$,路径是这样的$$1->6->2$$, 然后$$v_2=v_12{1-6}*2{6-2}=v_12^{1-2}$$。这样我们就可以知道其他点的速度。
代码实现也是很奇特,这个是参考的大佬 \(lhm\) 同学代码,很厉害的同学,后来转了临床医学,还想和他组队打打比赛呢,不过也祝福他,能够找到自己喜欢的专业,毕竟自己也是转专业进的计算机专业,对于转专业自己也是有感受的。
代码实现
#include<iostream>
#include<cstdio>
#include<queue>
#include<cmath>
using namespace std;
struct node{
int x,y;
double time;
bool operator < (const node& tmp) const
{
return time > tmp.time;
}
};
double v;
int n,m;
int book[110][110],a[110][110];
priority_queue<node>q;
int next[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
void bfs()
{
while(!q.empty()) q.pop();
q.push((node){1,1,0.0});
while(!q.empty())
{
node t=q.top(); q.pop();
if(book[t.x][t.y]==1) continue;
book[t.x][t.y]=1;
if(t.x==n&&t.y==m)
{
printf("%.2f\n",t.time);
return ;
}
for(int i=0;i<4;i++)
{
int tx=t.x+next[i][0];
int ty=t.y+next[i][1];
if(tx>=1&&tx<=n&&ty<=m&&ty>=1&&book[tx][ty]==0)
{
double tt=t.time+1.0/(pow(2.0,(a[1][1]-a[t.x][t.y]))*v);
q.push((node){tx,ty,tt}); //注意这里加入的点没有进行标记
}
}
}
return ;
}
int main()
{
while(scanf("%lf%d%d", &v, &n, &m)!=EOF)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
}
bfs();
}
return 0;
}
Skiing POJ 3037 很奇怪的最短路问题的更多相关文章
- C++是一把很奇怪的刀
C++是一把很奇怪的刀,首尾都是刀刃.用刀能出什么,还是要看拿刀的人.
- route 一个很奇怪的现象:我的主机能ping通同一网段的其它主机,并也能xshell 远程其它的主机,而其它的主机不能ping通我的ip,也不能远程我和主机
一个很奇怪的现象:我的主机能ping通同一网段的其它主机,并也能xshell 远程其它的主机,而其它的主机不能ping通我的ip,也不能远程我和主机. [root@NB Desktop]# route ...
- Java错误:很奇怪的错误。。。
刚刚调试java web中出现了一个很奇怪的现象,前端有一个页面通过ajax调用后台的servlet,当我把后台的servlet代码修改后(将返回值由a修改为b),前端页面仍然获取的是a.调试跟踪se ...
- 遇到一个git branch很奇怪的问题
最近,同事做了一个自动化的打包平台,但我发现里面的分支竟然有重复的,还有一些已经删除的branch. 比如,我已经删除了一个 test分支,在工程 game 目录下(已输入 git pull),输入: ...
- 有时候错误很奇怪啊,Comparator问题
有时候错误很奇怪啊,Comparator问题,在我的电脑上排序好用,但是在别的电脑上排序不好用, 真奇怪a
- POJ 3037 Skiing(如何使用SPFA求解二维最短路问题)
题目链接: https://cn.vjudge.net/problem/POJ-3037 Bessie and the rest of Farmer John's cows are taking a ...
- POJ 3037 Skiing
Skiing Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4810 Accepted: 1287 Special ...
- POJ 3037 Skiing(Dijkstra)
Skiing Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4668 Accepted: 1242 Special ...
- POJ - 3037 Skiing SPFA
Skiing Bessie and the rest of Farmer John's cows are taking a trip this winter to go skiing. One day ...
随机推荐
- ORACLE复杂查询之子查询
子查询分为两类:标准子查询和相关子查询. 一.标准子查询:子查询先于主查询独立执行,返回明确结果供主查询使用. 子查询只执行一次,不依赖于主查询. 例如: 其中子查询能够返回结果:2450.所以断定其 ...
- 故障检测、性能调优与Java类加载机制
故障检测.性能调优与Java类加载机制 故障检测.性能调优 用什么工具可以查出内存泄露 (1)MerroyAnalyzer:一个功能丰富的java堆转储文件分析工具,可以帮助你发现内存漏洞和减少内存消 ...
- Python基础(四)
一.迭代器 让不同数据类型具有相同的遍历方式:list.dict.str.tuple.set 1.特点: ①省内存 ②只能向前,不能反复 ③惰性机制 2.可迭代对象 ###dir() 查看 ...
- 洛谷 P1505 BZOJ 2157 [国家集训队]旅游
bzoj题面 Time limit 10000 ms Memory limit 265216 kB OS Linux 吐槽 又浪费一个下午--区间乘-1之后,最大值和最小值更新有坑.新的最大值是原来最 ...
- 洛谷P3948 数据结构——题解
题目传送 感觉这道题秀了我一地的智商... 审题没审好,没确定带修改的操作中询问的次数<=1000,且max和min都是事先给好.不变的.想了半天线段树.分块,却忘了最基础的暴力. 写不出题时先 ...
- Python3学习笔记(四):序列
一.序列概览 Python 包含6 种内建的序列:列表,元组,字符串,Unicode字符串,buffer对象和xrange对象.这里重点讨论最常用的两种类型:列表和元组. 列表与元组的主要区别在于: ...
- 【Python】学习笔记二:基本数据类型
变量 python的变量不需要提前声明,可以直接输入: >>> str = 'oliver' 此时,str已经被赋值字符串oliver,在赋值之前并没有提前定义与事先声明 打印值 & ...
- 实现Runable接口
步骤 定义一个实现Runable接口的类,在类中实现run()方法(线程执行事件的方法).创建一个上述类的对象:Thread t=new Thread(new MyThreadt.start());调 ...
- iterator删除元素
总结 在需要的删除等操作时,不能使用简单的foreach,因为其底层依然用的是Iterator,但是调用的是集合中的remove方法. 使用迭代器对象调用其中的remove方法,以保证线程同步.
- 如何设置linux bash终端的字符显示内容和颜色?
通常linux有1-6个字符终端 tty, 有1个图形终端. 通常用 ctrl+alt+f1 到f6是字符终端, ctrl+alt+f7为图形终端, 但是, 也有不一样的, 如: fedora的4.0 ...