【每日一题】29.maze (BFS 进阶)
补题链接:Here
本题代码由贺佬完成
这道题基本算一道 BFS 进阶题,有少许细节要小心 (WA1发。。
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
using ll = long long;
const int maxn = 300 + 10;
const int inf = 0x3f3f3f3f;
typedef pair<int, int> pii;
int n, m, q;
char g[maxn][maxn];
vector<int> f[maxn *
maxn]; //传送阵,若为0说明没有,值代表传送阵的另一端.
int step[maxn][maxn];
int go[4][2] = {0, 1, 1, 0, -1, 0, 0, -1};
pii st, ed;
struct node {
int x, y;
};
void bfs() {
queue<node> q;
node head, temp;
head.x = st.x, head.y = st.y;
step[st.x][st.y] = 0;
q.push(head);
while (!q.empty()) {
head = q.front();
q.pop();
for (int i = 0; i < 4; i++) {
temp.x = head.x + go[i][0], temp.y = head.y + go[i][1];
if (temp.x >= 0 && temp.x < n && temp.y >= 0 && temp.y < m
&& g[temp.x][temp.y] != '#'
&& step[temp.x][temp.y] > step[head.x][head.y] + 1) {
step[temp.x][temp.y] = step[head.x][head.y] + 1;
q.push(temp);
}
}
if (f[head.x * m + head.y].size() > 0) {
for (int i = 0; i < f[head.x * m + head.y].size(); i++) {
temp.x = f[head.x * m + head.y][i] / m,
temp.y = f[head.x * m + head.y][i] % m;
if (g[temp.x][temp.y] != '#'
&& step[temp.x][temp.y] > step[head.x][head.y] + 3) {
step[temp.x][temp.y] = step[head.x][head.y] + 3;
q.push(temp);
}
}
}
}
if (step[ed.x][ed.y] == inf)step[ed.x][ed.y] = -1;
cout << step[ed.x][ed.y] << endl;
}
void solve() {
bfs();
}
int main() {
// ios::sync_with_stdio(false)
while (cin >> n >> m >> q) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> g[i][j];
if (g[i][j] == 'S') {
st.x = i, st.y = j;
}
else if (g[i][j] == 'T') {
ed.x = i, ed.y = j;
}
step[i][j] = inf;
}
}
for (int i = 0; i <= n * m; i++) {
f[i].clear();
}
pii a, b;
int temp1, temp2;
for (int i = 0; i < q; i++) {
cin >> a.x >> a.y >> b.x >> b.y;
temp1 = a.x * m + a.y, temp2 = b.x * m + b.y;
f[temp1].push_back(temp2);
}
solve();
}
return 0;
}
【每日一题】29.maze (BFS 进阶)的更多相关文章
- 【每日一题】【BFS&Lambda&重建二叉树】2022年2月15日-根据先序中序重建并输出二叉树的右视图
描述 请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图 思路:重建&层次遍历记录最后一个&Lambda表达式 答案: import java.util.*; publ ...
- 老男孩IT教育-每日一题汇总
老男孩IT教育-每日一题汇总 第几天 第几周 日期 快速访问链接 第123天 第二十五周 2017年8月25日 出现Swap file….already exists以下错误如何解决? 第122天 2 ...
- PL/SQL Challenge 每日一题:2014-3-14 11gR2中带RELIES_ON子句的RESULT_CACHE函数
PL/SQL Challenge 每日一题:2014-3-14 11gR2中带RELIES_ON子句的RESULT_CACHE函数 最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可 ...
- [每日一题]ES6中为什么要使用Symbol?
关注「松宝写代码」,精选好文,每日面试题 加入我们一起学习,day day up 作者:saucxs | songEagle 来源:原创 一.前言 2020.12.23日刚立的flag,每日一题,题目 ...
- 「每日一题」面试官问你对Promise的理解?可能是需要你能手动实现各个特性
关注「松宝写代码」,精选好文,每日一题 加入我们一起学习,day day up 作者:saucxs | songEagle 来源:原创 一.前言 2020.12.23日刚立的flag,每日一题,题目类 ...
- 「每日一题」有人上次在dy面试,面试官问我:vue数据绑定的实现原理。你说我该如何回答?
关注「松宝写代码」,精选好文,每日一题 时间永远是自己的 每分每秒也都是为自己的将来铺垫和增值 作者:saucxs | songEagle 来源:原创 一.前言 文章首发在「松宝写代码」 2020. ...
- [每日一题]面试官问:Async/Await 如何通过同步的方式实现异步?
关注「松宝写代码」,精选好文,每日一题 时间永远是自己的 每分每秒也都是为自己的将来铺垫和增值 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...
- [每日一题]面试官问:for in和for of 的区别和原理?
关注「松宝写代码」,精选好文,每日一题 时间永远是自己的 每分每秒也都是为自己的将来铺垫和增值 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...
- [每日一题]面试官问:谈谈你对ES6的proxy的理解?
[每日一题]面试官问:谈谈你对ES6的proxy的理解? 关注「松宝写代码」,精选好文,每日一题 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...
- 【python】Leetcode每日一题-矩阵置零
[python]Leetcode每日一题-矩阵置零 [题目描述] 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 .请使用 原地 算法. 进阶: 一个直观的解 ...
随机推荐
- IDEA提示Cannot resolve method 'getContextPath()'
一.问题原因: 二.解决方案: 1.打开Project Structure 2.new一个新的Java的project library文件 3.选择tomcat路径下的lib文件夹. 三.完成 可以看 ...
- 深度掌握TypeScript中的重载【函数重载、方法重载】
深度掌握TypeScript中的重载[函数重载.方法重载] 1. 函数重载,方法重载的重要性 著名前端流行框架底层都用到函数重载,例如:Vue3 底层源码就多处使用到带泛型的函数重载.很多前端面试更是 ...
- three.js 汽车行驶效果
实现原理是使用TWEEN.Tween实现动画效果 实现 汽车模型加载 使用Promise编写模型的异步加载方法 Car.prototype.loadCar = function (position, ...
- 用最清爽的方式开发dotNet
用最清爽的方式开发dotNet 不管是官方自带模板还是其他开源搞的,总是一来一大堆,如果你也嫌弃这些过于臃肿,不如看看我这个方式 前提 假设我要做一个简单的api 方式 想到清爽,那肯定是简单方便,脑 ...
- [NOI online22提高A] 丹钓战
题目描述 有 \(n\) 个二元组 \((a_i, b_i)\),编号为 1 到 n. 有一个初始为空的栈 SS,向其中加入元素 \((a_i, b_i)\) 时,先不断弹出栈顶元素直至栈空或栈顶元素 ...
- 使用SPEL自定义表达式
自定义表达式 Spring提供了一个可以自定义表达式的接口 package com.qbb.qmall.item; import org.junit.Test; import org.springfr ...
- 太牛叉了!国产 AI 智能体惊艳问世,全面致敬 FastGPT!
太震撼了!太厉害了!昆仑万维正式发布了「天工 SkyAgents」平台,助力大模型走入千家万户.你听听,这个名字一听就有一种巧夺天工的感觉,技艺那是相当的高超. 这个平台基于昆仑万维「天工大模型」打造 ...
- Charles的奇巧淫技
大家好,我是 dom 哥.今天讨论一下 Charles 的高级用法. Charles 是 mac 电脑的一个网络代理软件,也是我平时开发常用的一个工具,用过的都说好. 本文不是 Charles 的入门 ...
- navicat连接服务器mysql
navicat连接服务器mysql 第一步:配置防火墙 连接服务器的mysql数据库,我们首先需要在服务器上放行3306端口(MySQL服务对应的端口),进入服务器管理页面防火墙,点击添加规则,放行3 ...
- Hugging Face 年度回顾:2023,开源大模型之年
在 2023 年,大型语言模型(Large Language Models,简称 LLMs)受到了公众的广泛关注,许多人对这些模型的本质及其功能有了基本的了解.是否开源的议题同样引起了广泛的讨论.在 ...