UVA11573 Ocean Currents
题目
见链接。
题解
知识点:BFS。
这道题显然用BFS,但发现洋流方向会破坏时间的有序性,但注意到洋流时间花费是 \(0\) ,因此只需要用双端队列即可,洋流方向扩展直接放队头,其他方向放队尾。
同样要注意时间线在本次就改变,因此锁点要在之后锁。
时间复杂度 \(O(?)\)
空间复杂度 \(O(mn)\)
代码
#include <bits/stdc++.h>
using namespace std;
int n, m;
char dt[57][57];
const int dir[8][2] = { {-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1} };
bool vis[57][57];
struct node {
int x, y;
int step;
};
int bfs(node st, node ed) {
deque<node> dq;
dq.emplace_back(st);
while (!dq.empty()) {
node cur = dq.front();
dq.pop_front();
if (vis[cur.x][cur.y]) continue;
vis[cur.x][cur.y] = 1;
if (cur.x == ed.x && cur.y == ed.y) return cur.step;
for (int i = 0;i < 8;i++) {
int xx = cur.x + dir[i][0];
int yy = cur.y + dir[i][1];
if (xx <= 0 || xx > n || yy <= 0 || yy > m || vis[xx][yy]) continue;
if (i == dt[cur.x][cur.y] - '0') dq.push_front({ xx,yy,cur.step });
else dq.push_back({ xx,yy,cur.step + 1 });
}
}
return -1;
}
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n >> m;
for (int i = 1;i <= n;i++)
for (int j = 1;j <= m;j++)
cin >> dt[i][j];
int q;
cin >> q;
while (q--) {
memset(vis, 0, sizeof(vis));
int sx, sy, ex, ey;
cin >> sx >> sy >> ex >> ey;
cout << bfs({ sx,sy,0 }, { ex,ey,0 }) << '\n';
}
return 0;
}
UVA11573 Ocean Currents的更多相关文章
- UVA 11573 - Ocean Currents(BFS+优先队列)
UVA 11573 - Ocean Currents 题目链接 题意:给定一个海面.数字分别代表海流方向,顺着海流不用费能量,逆海流要费1点能量,每次询问给一个起点一个终点,问起点到终点耗费的最小能量 ...
- UVA 11573 Ocean Currents --BFS+优先队列
采用优先队列做BFS搜索,d[][]数组记录当前点到源点的距离,每次出队时选此时eng最小的出队,能保证最先到达的是eng最小的.而且后来用普通队列试了一下,超时..所以,能用优先队列的,就要用优先队 ...
- 【HDOJ】2757 Ocean Currents
简单BFS. /* 2757 */ #include <iostream> #include <queue> #include <cstdio> #include ...
- hdu 2757 Ocean Currents(优先队列+bfs)
小伙伴们真心被这道题惊呆了!刚开始是读题,题目都把小伙伴惊呆了,题目都读不懂! 在前面猴子小伙伴的帮助下,理解了一点点,又偷偷的在纸上写写画画,明白了题意! 后来,你懂的,果断拿下!在拿下的过程也经过 ...
- Organic Solar Cells - Theory and Practice
renewable engergy: Wind solar Tidal Wave Ocean Bio Etc. How much energy we gonna need as following y ...
- NCE3
Lesson1 A puma at large Pumas are large, cat-like animals which are found in America. When reports ...
- VPS -Digital Ocean -初试以及VPN的搭建
首先恭喜你找到这篇博客,它会带你走出困境. 题外话(请忽略):一直以来想搞一个VPS,终于在自己的刺激下试了一下Digital Ocean,还没有使用很长时间不做太多评论,唯一给我的感觉是各种操作还算 ...
- github student pack中的digital ocean可以使用银联卡支付
申请了 github student pack却因为一直没有visita信用卡,而无法使用digital ocean的 $50,一直到今天,用中国银行借记卡成功支付. 方法是: (1)注册paypal ...
- Digital Ocean VS. Linode对比评测
美国攻城师Zach Schneider是linode vps资深用户,他最近却转向了Digital Ocean,原因是什么呢?来看这篇digitalocean linode对比评测的文章: 用了两年的 ...
- Jenkins2 实现持续交付初次演练(MultiJob,Pipeline,Blue Ocean)
背景 项目需要用到自动部署,但可获取外网的节点机器只有一台,那只能同过主节点机器进行构建完成然后分发至对应服务器进行启动更新. 目前已尝试过三种方式: 1.Pipeline-Trigger param ...
随机推荐
- css - 隐藏body滚动条
body::-webkit-scrollbar{ display: none; }
- SQL函数——时间函数
1.使用 NOW() . CURDATE().CURTIME() 获取当前时间 在这里我有一个问题想问问大家,你们平时都是怎么样子获取时间的呢?是不是通过手表.手机.电脑等设备了解到的,那么你们有没有 ...
- C++ 关键字 new
new new 是C++ 中的关键字,有两个含义 new 表达式 作为运算符的函数名,也就是 operator new new 表达式 提供一个特定的内存分配格式,返回在存储空间上构造的对象或对象数组 ...
- IL合集二
引言 在第一篇关于IL的文章中,我们写了一些IL的相加,创建对象,循环以及实现TryCatch的一些功能,接下来,为大家带上后续关于IL的更新,其中包括,类型转换,以及条件判断,还有定义字段,定义属性 ...
- [转帖]Debian开启SSH
一.Debian开启SSH 参考链接: https://blog.csdn.net/zzpzheng/article/details/71170572 https://help.aliyun.com/ ...
- [转帖]华为FusionSphere虚拟化解决方案介绍
https://huaweicloud.csdn.net/63566589d3efff3090b5d243.html?spm=1001.2101.3001.6650.2&utm_medium= ...
- [转帖]手摸手搭建简单的jmeter+influxdb+grafana性能监控平台
我安装的机器是阿里云的centos8机器,其他的系统暂未验证 1.安装influxdb influxdb 下载地址https://portal.influxdata.com/downloads/,也可 ...
- [转帖]金仓数据库KWR使用说明
金仓数据库KWR使用说明 1.KWR性能报告介绍 2.部署KWR性能报告功能 2.1.修改配置文件 2.2.使配置文件中参数生效 2.3.创建KWR扩展 3.使用KWR快照功能 3.1.创建KWR快照 ...
- Linux 通过yum 方式离线下载依赖rpm包的操作步骤
离线下载依赖rpm包的方法 1.简单获取依赖关系 yum deplist rpm-build 注意 deplist 为依赖项目 我在arm 上面简单跑一下结果为 package: rpm-build- ...
- ccs3动画-div向上移动的动画
<head> <meta charset="UTF-8"> <meta name="viewport" content=" ...