【每日一题】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 .请使用 原地 算法. 进阶: 一个直观的解 ...
随机推荐
- [ABC267F] Exactly K Steps
Problem Statement You are given a tree with $N$ vertices. The vertices are numbered $1, \dots, N$, a ...
- js上传多个文件到asp.net core,并实时转存到阿里云oss
有时候,为了追求便利性,我们可能会让前端直接将文件上传到阿里云OSS,然后将URL提交给ASP.NET.然而,这种做法意味着前端需要拥有OSS的访问密钥,而将密钥存放在前端,无疑增加了被破解的风险.因 ...
- python tkinter使用(十一)
python tkinter使用(十一) 本篇文章主要讲下tkinter 窗口的一些属性,以及实现无法关闭的窗口中遇到的一些问题. #!/usr/bin/python3 # -*- coding: U ...
- python tkinter 使用(三)
python tkinter 使用(三) 本篇文章主要讲下tkinter下的filedialog的使用. 1: askopenfilename 首先使用tkinter中fiedialog来实现一个简单 ...
- Javascript Ajax总结——跨域资源共享
XHR对象只能访问与包含它的页面位于同一个中的资源.这种安全策略可以预防某些恶意行为.CORS(Cross-Origin Resource Sharing,跨域资源共享)是W3C的一个工作草案,定义了 ...
- Vue3节流指令封装
节流指令 import { ObjectDirective } from 'vue' interface ThrottleEl extends HTMLElement { throttleEvent: ...
- Math数学工具类、向上取整,向下取整,四舍五入,最大值
package com.guoba.math; public class MathTest { /* Math数学工具类,包含以下方法: .ceil() 向上取整 .floor() 向下取整 .rou ...
- 从大数据到AI,华为云存储加速企业大模型快速应用
摘要:AI与大数据算法不断发展,在生产中的应用也越来越广,而应用的场景除了对算法,软件架构要求越来越高外,也对底层IaaS(基础设施即服务)提出了新的挑战. AI与大数据算法不断发展,在生产中的应用也 ...
- 实战案例丨GaussDB for DWS如何识别坏味道的SQL
摘要:SQL中的坏味道,你知道吗? SQL语言是关系型数据库(RDB)的标准语言,其作用是将使用者的意图翻译成数据库能够理解的语言来执行.人类之间进行交流时,同样的意思用不同的措辞会产生不同的效果. ...
- 云小课|DSC帮您管数据,保障您的云上数据安全
摘要:华为数据安全中心,积累华为云多年数据经验,整合云上各类数据源,搭载数据安全黑科技,通过深度行为识别引擎,助您轻松管理云上数据. 本文分享自华为云社区<云小课 | DSC帮您管数据,保障您的 ...