离开中山路(bfs)

题目背景
《爱与愁的故事第三弹·shopping》最终章。

题目描述
爱与愁大神买完东西后,打算坐车离开中山路。现在爱与愁大神在x1,y1处,车站在x2,y2处。现在给出一个n×n(n<=1000)的地图,0表示马路,1表示店铺(不能从店铺穿过),爱与愁大神只能垂直或水平着在马路上行进。爱与愁大神为了节省时间,他要求最短到达目的地距离(a[i][j]距离为1)。你能帮他解决吗?

输入格式
第1行:一个数 n

第2行~第n+1行:整个地图描述(0表示马路,1表示店铺,注意两个数之间没有空格)

第n+2行:四个数 x1,y1,x2,y2

输出格式
只有1行:最短到达目的地距离

思路:这是一道简简单单的bfs题,题目要求求最短路径,我们可以用bfs来搜索,第一个搜索到的肯定就是最优解,我们直接输出即可,总之这套题就是访问过的打标记即可,然后判断四个方向有没有符合条件的值我们直接走过去即可,记得初始位置赋值为1;

#include<bits/stdc++.h>
using namespace std;
int n,xx1,yy1,x2,y2;
char a[1010][1010];
bool vis[1010][1010];
int dx[5]={
   0,-1,0,1,0
### 关于广度优先搜索 (BFS) 的洛谷题目练习 #### BFS 基础概述 广度优先搜索(breadth-first search, 缩写为 bfs)是一种用于图的搜索算法,能够系统地展开并检查图中的所有节点以找到目标结果。该方法从初始状态出发,逐步扩展到所有的相邻节点,并按层次顺序依次处理这些节点[^1]。 以下是几类适合初学者和中级学习者的 BFS 练习题及其特点: --- #### 洛谷经典 BFS 题目推荐 1. **P1746 离开中山路** 这是一道典型的 BFS 应用题,涉及二维地图上的最短路径计算。题目要求在给定的地图上找到从起点到达终点所需的最少步数。此题考察了如何利用队列实现 BFS 层次遍历以及如何记录访问状态以避免重复计算[^2]。 ```cpp #include <bits/stdc++.h> using namespace std; int main() { // 初始化地图大小和其他参数 int n, m; cin >> n >> m; vector<string> grid(n); for(int i=0;i<n;i++) cin>>grid[i]; queue<pair<int,int>> q; // 定义队列存储坐标 bool visited[n][m]; memset(visited,false,sizeof(visited)); // 起点入队 pair<int,int> start={...}; q.push(start); visited[start.first][start.second]=true; while(!q.empty()){ auto current=q.front(); q.pop(); // 扩展当前节点的所有邻居 // ... } cout << "最小步数:" << result; } ``` 2. **P1162 填涂颜色** 此题是一个基于网格的操作问题,需要通过 BFS 来模拟填涂过程。它不仅测试了选手对于 BFS 的理解程度,还涉及到边界条件判断和多方向扩展的能力。 3. **P1378 表达式求值** 尽管表面上看这似乎不是一道标准的 BFS 问题,但实际上可以通过构建表达式的解析树并通过 BFS 对其进行层序遍历来解决。这类题目有助于加深对 BFS 数据结构的理解。 4. **P1984 地牢大师** 描述了一个三维空间内的迷宫逃脱场景,增加了维度之后使得问题更加复杂化但也更贴近实际应用场景。解答过程中需特别留意内存优化技巧以免超限。 5. **P1555 方格取数 II** 结合动态规划思想的一道综合性较强的大规模数据处理挑战赛项目。虽然主要依赖DP完成最终得分统计工作,但在预处理阶段依然需要用到高效的BFS策略快速定位可达区域范围。 --- #### 注意事项 当尝试上述任何一类竞赛型编程任务时,请务必牢记以下几点建议: - 明确输入输出格式; - 准备好必要的辅助工具函数比如读取矩阵或者打印调试信息等操作; - 合理设置时间/空间限制下的性能指标评估方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这咋又bug了嘛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值