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 很奇怪的最短路问题的更多相关文章

  1. C++是一把很奇怪的刀

    C++是一把很奇怪的刀,首尾都是刀刃.用刀能出什么,还是要看拿刀的人.

  2. route 一个很奇怪的现象:我的主机能ping通同一网段的其它主机,并也能xshell 远程其它的主机,而其它的主机不能ping通我的ip,也不能远程我和主机

    一个很奇怪的现象:我的主机能ping通同一网段的其它主机,并也能xshell 远程其它的主机,而其它的主机不能ping通我的ip,也不能远程我和主机. [root@NB Desktop]# route ...

  3. Java错误:很奇怪的错误。。。

    刚刚调试java web中出现了一个很奇怪的现象,前端有一个页面通过ajax调用后台的servlet,当我把后台的servlet代码修改后(将返回值由a修改为b),前端页面仍然获取的是a.调试跟踪se ...

  4. 遇到一个git branch很奇怪的问题

    最近,同事做了一个自动化的打包平台,但我发现里面的分支竟然有重复的,还有一些已经删除的branch. 比如,我已经删除了一个 test分支,在工程 game 目录下(已输入 git pull),输入: ...

  5. 有时候错误很奇怪啊,Comparator问题

    有时候错误很奇怪啊,Comparator问题,在我的电脑上排序好用,但是在别的电脑上排序不好用, 真奇怪a

  6. POJ 3037 Skiing(如何使用SPFA求解二维最短路问题)

    题目链接: https://cn.vjudge.net/problem/POJ-3037 Bessie and the rest of Farmer John's cows are taking a ...

  7. POJ 3037 Skiing

    Skiing Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4810   Accepted: 1287   Special ...

  8. POJ 3037 Skiing(Dijkstra)

    Skiing Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4668   Accepted: 1242   Special ...

  9. 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 ...

随机推荐

  1. vsftp配置文件

    直接使用,本地用户可以使用账号密码登录 # Example config file /etc/vsftpd/vsftpd.conf # # The default compiled in settin ...

  2. C# SqlSugarClient分析一点

    public class UserManager : DbContext<User>{} UserManager userdb = new UserManager(); //创建对象 va ...

  3. 2018百度之星初赛A轮 度度熊学队列

    注意:刚开始用数组存deque<int> qa[MAX]会爆内存 需要改用map<int, deque<int> > qa优化 不明觉厉 #include<b ...

  4. Centos7安装Redis3.X

    本文只是简单搭建Redis,为了整合ELK用,后面会详细写. Redis:REmote DIctionary Server(远程字典服务器) 是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高 ...

  5. 【CF1252L】Road Construction(基环树,最大流)

    题意:给定一张n点n边无重边自环的无向图,刚开始每条边都没有被选择,每条边上有一个颜色集合,必须从中选择一种 有K个工人,每个工人有颜色a[i],需要把工人分配到与其颜色相同的边上 问是否能有一种使得 ...

  6. Android视频处理 --处理视频第一帧缩略图

    从API 8开始,新增了一个类: android.media.ThumbnailUtils这个类提供了3个静态方法一个用来获取视频第一帧得到的Bitmap,2个对图片进行缩略处理. ? 1 publi ...

  7. oracle11g安装补丁升级

    检查当前数据库CPU和PSU补丁信息 方法一: 登录数据库,检查DBA_REGISTRY_HIST视图. SYS@orcl> select *from dba_registry_history; ...

  8. Linux shell - shift命令用法(转载)

    位置参数可以用shift命令左移.比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1.$2.$3丢弃,$0不移动.不带参数的shift命令相当于shift 1. 非常 ...

  9. 国内4G频段划分

    国内4G频段划分 2015年   4G网络建设如火如荼地进行,换手机大家几乎都买的4G手机,那么看到如下参数怎么知道手机所支持的网络呢? SIM 1:4G TDD-LTE:TD38/39/40/41: ...

  10. zabbix分布式监控环境搭建

    本次测试主要是在 centos 系统环境实践,测试内容:集群多台服务器资源监控做后续铺垫.zabbix的简介和自身的特点.在这就不阐述了 查询防火墙状态service iptables status停 ...