题目分析

分析: bfs求最短路,主要原因是因为bfs是一层一层的搜,当第一次搜到终点的时候,其实就是到终点的最短路。

  1. 本题bfs倒着搜,从终点(n-1,n-1)开始搜,记录到每个点的路径nxt[][]
  2. 输出从起点(0,0)到终点(n-1, n-1)的路径,顺次输出nxt[][]数组即可

AC代码

#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
const int N = 1010, M = N * N;int n;
int g[N][N];
PII q[M];
PII nxt[N][N]; // 从终点开始,保存前一个点,类似于路径链表void bfs(int sx, int sy){int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0 ,-1};int hh = 0, tt = 0;q[hh] = {sx, sy};memset(nxt, -1 , sizeof nxt); // 初始化为 -1,代表没确定该点nxt[sx][sy] = {0,0};while( hh <= tt){PII t = q[hh++];for(int i = 0; i < 4; i++){int a = t.x + dx[i], b = t.y + dy[i];if( a < 0 || a >= n || b < 0 || b >= n) continue;// 是墙,跳过if( g[a][b]) continue;// 如果(a,b)这个点被遍历过if( nxt[a][b].x != -1) continue;// 扩展路径q[ ++ tt] = {a,b};// 记录路径nxt[a][b] = t;}}
}int main(){cin >> n;for(int i = 0; i < n; i++)for(int j = 0; j< n; j++)  cin >> g[i][j];bfs(n -1 , n -1); // 倒着搜PII end(0, 0);while(true){cout << end.x << " " << end.y << endl;if(end.x == n -1 && end.y == n-1) break;end = nxt[end.x][end.y];}}

题目来源

https://www.acwing.com/problem/content/1078/

算法提高课-搜索-最短路模型-AcWing 1076. 迷宫问题:bfs最短路、路径相关推荐

  1. 算法提高课-搜索-最小步数模型-AcWing 1107. 魔板:bfs、复杂、八数码类似的题目

    题目分析 来源:acwing 分析: 最小步数模型常用哈希 按照ABC的顺序来搜,得到的是字典序最小的. 这里整幅"图"是一个状态, 装进一个字符串中,然后一个状态改变到另一个状态 ...

  2. 算法提高课-搜索-双向广搜 AcWing 190. 字串变换:bfs、双向bfs、queue和unordered_map

    题目分析 来源:acwing 分析: 双向广搜主要用在最小步数模型(也称状态图模型)里面,这里整个状态空间一般是指数级别的,用双向广搜可以极大地提高运行效率. 双向广搜,顾名思义,就是从起点和终点都进 ...

  3. 算法提高课-搜索-多源BFS-AcWing 173. 矩阵距离:bfs、多源bfs

    题目分析 来源:acwing 分析: 0表示住户,1表示超市,这些超市是等价的.求每个住户到达超市的最近距离. 多源bfs在做的时候,把所有超市的距离都初始化为0,然后压入队列. 这里用的是数组模拟队 ...

  4. 算法提高课-搜索-最短路模型-AcWing 1100. 抓住那头牛:bfs

    题目分析 来源:acwing 分析:bfs求最短步数,需要dist[]数组来记录最短步数. ac代码 #include<bits/stdc++.h> using namespace std ...

  5. 算法提高课-搜索-最短路模型-AcWing 188. 武士风度的牛 :bfs、dist数组记录最小步数

    题目分析 来源:acwing 分析:马走日,这里用bfs遍历马的行走过程,输出到达终点的最小步数. 使用bfs求到每个点的最小步数,需要开一个dist[][]数组,来记录起点到某点的最小步数. 队列里 ...

  6. 算法提高课-搜索-DFS之连通性模型-AcWing 1113. 红与黑:dfs和bfs两种做法

    题目分析 来源:acwing 分析: ac代码 dfs写法 dfs搜的时候需要dfs(下一状态) 本题统计连续的黑色格子数量 :从(x, y) – > (a ,b) 扩展时, cnt += df ...

  7. 算法提高课-搜索-DFS之连通性模型-AcWing 1112. 迷宫:dfs和bfs两种解法

    题目分析 来源:acwing 分析: dfs是一路搜下去,不撞南墙不回头. dfs解法 #include<bits/stdc++.h> using namespace std; const ...

  8. 算法提高课-搜索-A*(A star)算法-AcWing 179. 八数码:A星算法求解

    题目分析 来源:acwing 分析: A*算法是什么呢? A算法是一种bfs的变式,需要用到一个"估价函数",用来计算任意状态到目标状态所需代价的估计值.然后在搜索中,维护一个堆, ...

  9. 算法提高课-搜索-双端队列广搜-AcWing 175. 电路维修:deque、bfs、有点难

    题目分析 来源:acwing 只有边权为0和边权为1,两种情况.什么意思呢?两个点之间存在路径则边权为0,需要转一下连通的边权为1. 每个点可能入队多次,本质上是个dijkstra算法. 下图说明bf ...

最新文章

  1. oracle access manager token,AuthenticationManager验证原理
  2. python科学计算笔记(四)pandas 数据索引与选取
  3. Angular jasmine单元测试框架spec的运行时数据结构
  4. 20141126-解决联网问题-笔记
  5. 前端培训什么机构好?有什么好的学习方法能少走弯路?
  6. [转载] python中numpy包使用方法总结
  7. linux设置activemq开机启动,Activemq(centos7)开机自启动服务
  8. iphone NSString 字符串处理:截取字符串、匹配字符串、分隔字符串
  9. vue用阿里云oss上传图片使用分片上传只能上传100kb以内的解决办法 1
  10. Mac上使用Chrome浏览器截取长图
  11. 数据库中的操作(语法)
  12. 纯干货:微软漏洞中国第一人黄正——如何用正确姿势挖掘浏览器漏洞(附完整 PPT)
  13. 啡鸟集:什么样的咖啡豆,才是好的咖啡豆?
  14. Arturia黑五促销,仅剩一天
  15. Intellij IDEA的激活(使用破解补丁永久激活)
  16. Linux硬盘空间爆满后如何清理
  17. java中synchronized锁的升级(偏向锁、轻量级锁及重量级锁)
  18. MybatisPlus---从入门到深化
  19. 用计算机对医学图像做后处理,医学图像后处理.ppt
  20. 2020.2.13普及C组 马蹄印【纪中】【dfs】

热门文章

  1. SSH框架搭建的时候遇到的问题
  2. Hibernate中Entity实体类的写法
  3. silverlight turntable
  4. python排序函数set_【Python】排列组合itertools 集合set
  5. 计算Gaunt积分 m1m2<0
  6. 改mysql修改界定符_dbvisualizer参数设置
  7. 【Paper】2022_基于无人驾驶地面车辆的多Agent系统仿真平台的设计及编队控制协议的研究
  8. 【控制】频域分析及奈氏判据
  9. 2.19 总结-深度学习-Stanford吴恩达教授
  10. Ardino基础教程 6_抢答器