【洛谷】P3818 小A和uim之大逃离 II(bfs)

2023-10-07 17:01
文章标签 bfs ii 洛谷 之大 p3818 uim 逃离

本文主要是介绍【洛谷】P3818 小A和uim之大逃离 II(bfs),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1:思路:

vis前两维记录坐标,第三维记录是否用过药水,然后bfs即可,注意判重。

注意如果一个点用过了药水,则他所有可以扩展的点的状态都是喝过的,就是flag=1,不能再用药水了,不用再搜。

这个点没用过的话,它扩展的点的既有不用的(上下左右),也有用药水的,都要入队。

2:注意:

数据范围题目中是<=1000,开1010第二点会re,直接开2010,AC

3:ACcode:


#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN = 2010;
struct node {int x,y,step,flag;
} cur,nxt;
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};
char mp[MAXN][MAXN];
bool v[MAXN][MAXN][2];
int n,m,f,d,r;
queue<node>q;
void bfs() {q.push({1,1,0,0});v[1][1][0] = true;while (!q.empty()) {cur = q.front();q.pop();if(cur.x==n&&cur.y==m) {cout<<cur.step<<"\n";return;}f=cur.flag;for (int i=0; i<4; ++i) {int xx = dx[i]+cur.x;int yy = dy[i]+cur.y;if (xx>0&&xx<=n&&yy>0&&yy<=m&&mp[xx][yy]!='#'&&!v[xx][yy][f]) {v[xx][yy][f] = true;q.push({xx,yy,cur.step+1,f});}}int xx = cur.x+d, yy = cur.y+r;if (f==0&&!v[xx][yy][1]&&xx>0&&xx<=n&&yy>0&&yy<=m&&mp[xx][yy]!='#') {v[xx][yy][1] = true;q.push({xx,yy,cur.step+1,1});}}cout<<-1<<"\n";
}
void solve() {cin>>n>>m>>d>>r;for (int i=1; i<=n; ++i)for (int j=1; j<=m; ++j)cin>>mp[i][j];bfs();
}
signed main() {ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int t=1;
//	cin>>t;while(t--) {solve();}return 0;
}

over~

这篇关于【洛谷】P3818 小A和uim之大逃离 II(bfs)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/159157

相关文章

多源 BFS

例题一 解法(bfs)(多个源头的最短路问题) 算法思路: 对于求的最终结果,我们有两种⽅式: • 第⼀种⽅式:从每⼀个 1 开始,然后通过层序遍历找到离它最近的 0 。 这⼀种⽅式,我们会以所有的 1 起点,来⼀次层序遍历,势必会遍历到很多重复的点。并且如果 矩阵中只有⼀个 0 的话,每⼀次层序遍历都要遍历很多层,时间复

代码随想录算法训练营第三十九天|62.不同路径 63. 不同路径 II 343.整数拆分 96.不同的二叉搜索树

LeetCode 62.不同路径 题目链接:62.不同路径 踩坑:二维的vector数组需要初始化,否则会报错访问空指针 思路: 确定动态数组的含义:dp[i][j]:到达(i,j)有多少条路经递推公式:dp[i][j] = dp[i-1][j] + dp[i][j-1]初始化动态数组:dp[0][0] = 1遍历顺序:从左到右,从上到下 代码: class Solution {pu

leetcode刷题(39)——反转链表 II

这道题可以说是非常难的,2中解法,迭代和递归,递归更加难想出来 解法1:迭代链接反转 算法 在看具体算法之前,有必要先弄清楚链接反转的原理以及需要哪些指针。举例而言,有一个三个不同结点组成的链表 A → B → C,需要反转结点中的链接成为 A ← B ← C。 假设我们有两个指针,一个指向结点 A,一个指向结点 B。 分别记为 prev 和 cur。则可以用这两个指针简单地实现 A 和 B

leetcode刷题(38)——142. 环形链表 II

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 说明:不允许修改给定的链表。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:tail connects to node index 1

leetcode刷题(93)——213. 打家劫舍 II

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。 示例 1: 输入: [2,3,2]输出: 3解释:

【数学】100332. 包含所有 1 的最小矩形面积 II

本文涉及知识点 数学 LeetCode100332. 包含所有 1 的最小矩形面积 II 给你一个二维 二进制 数组 grid。你需要找到 3 个 不重叠、面积 非零 、边在水平方向和竖直方向上的矩形,并且满足 grid 中所有的 1 都在这些矩形的内部。 返回这些矩形面积之和的 最小 可能值。 注意,这些矩形可以相接。 示例 1: 输入: grid = [[1,0,1],[1,1,1]]

BFS:解决多源最短路问题

文章目录 什么是多源最短路问题?1.矩阵2.飞地的数量3.地图的最高点4.地图分析总结 什么是多源最短路问题? 多源最短路问题(Multi-Source Shortest Path Problem,MSSP)是图论中的一个经典问题,它的目标是在给定图中找到从多个源点到所有其他顶点的最短路径。这个问题可以视为单源最短路问题(Single-Source Shortest Pa

代码随想录算法训练营第四十六天 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、123.买卖股票的最佳时机III

121. 买卖股票的最佳时机 题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/ 文档讲解:https://programmercarl.com/0121.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4… 视频讲解:https://www.bil

287 寻找重复数-类似于环形链表II

题目 给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。 你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。 示例 输入:nums = [1,3,4,2,2] 输出:2 解析 这道题倒是可以读懂,就是找到数

代码随想录算法训练营第四十六天| 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、123.买卖股票的最佳时机III

LeetCode 121. 买卖股票的最佳时机 题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/ 文章链接:https://programmercarl.com/0121.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%B