题目分析



来源:acwing

分析:马走日,这里用bfs遍历马的行走过程,输出到达终点的最小步数。

  1. 使用bfs求到每个点的最小步数,需要开一个dist[][]数组,来记录起点到某点的最小步数。
  2. 队列里面需要判断很多东西,容易忘记的是:已经遍历过的点直接continue,遍历过的点是dist[][] != -1.
  3. 当找到终点时,直接return dist[t.x][t.y] + 1;

ac代码

#include<bits/stdc++.h>
#define x  first
#define y second
using namespace std;
const int  N = 200, M = N * N;
typedef pair<int,int> PII;
PII q[M];
int n,m;
char g[N][N];
int dist[N][N]; // 记录最短步数    int bfs(int sx, int sy){int dx[8] = {-2, -1, 1, 2, 2, 1, -1, -2};int dy[8] = {1, 2, 2, 1, -1, -2, -2, -1};memset(dist, -1, sizeof dist);int hh = 0, tt = 0;q[hh] = {sx,sy};dist[sx][sy] = 0;int cnt = 0;while( hh <= tt){PII t = q[hh ++];for(int i = 0; i < 8; i++){int a = t.x + dx[i], b = t.y+ dy[i];if( a < 0 || a >= n || b < 0 || b >= m) continue;if(g[a][b] == '*') continue;if(dist[a][b] != -1) continue;if(g[a][b] == 'H') return dist[t.x][t.y] + 1;dist[a][b] = dist[t.x][t.y] + 1;q[++ tt] = {a, b};}}return -1;
}int main(){cin >> m >> n;for(int i = 0; i < n; i++) cin >> g[i];for(int i = 0; i < n; i ++)for(int j = 0; j < m; j ++)if( g[i][j] == 'K'){cout <<bfs(i, j);}}

题目来源

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

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

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

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

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

    题目分析 分析: bfs求最短路,主要原因是因为bfs是一层一层的搜,当第一次搜到终点的时候,其实就是到终点的最短路. 本题bfs倒着搜,从终点(n-1,n-1)开始搜,记录到每个点的路径nxt[][ ...

  3. AcWing 188. 武士风度的牛(BFS,C++)

    AcWing 188. 武士风度的牛 题意 从一个起点遵循某种特殊规则走到终点,求最短的步数 分析 很显然,这题是bfs思想的应用. 1.首先输入数据,并在每次输入数据时判断起点和终点的坐标. 2.初 ...

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

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

  5. AcWing 188. 武士风度的牛 BFS 水题

    题目描述 农民John有很多牛,他想交易其中一头被Don称为The Knight的牛. 这头牛有一个独一无二的超能力,在农场里像Knight一样地跳(就是我们熟悉的象棋中马的走法). 虽然这头神奇的牛 ...

  6. AcWing 188. 武士风度的牛

    知识点:广搜 李煜东的例题讲的那么难,习题确这么简单,不过这个样子也对,把最精华的东西放到例题里面好好讲讲 #include <bits/stdc++.h>using namespace ...

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

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

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

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

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

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

最新文章

  1. 模拟键盘输入的keycode
  2. 百分点内存数据库架构演变
  3. 深入Redis内部-Redis 源码讲解
  4. 【MongoDB】嵌套数组查询方案
  5. 你了解微服务架构么?
  6. C#中简单的正则表达式(也经常会用到的)
  7. AI:***一文读懂ML,DB/NLP/算法全有了……
  8. jzoj4227-B【dp,字符串】
  9. python怎么打开一个窗口_python – 使按钮一次只打开一个窗口(通过关闭Toplevel窗口启用按钮)...
  10. LSTM模型在问答系统中的应用
  11. SQLServer 2008 r2下载及安装
  12. k8s-configmap 挂载使用
  13. 4十4十4写成乘法算式_小学数学二年级下册数学1-4单元知识点复习提前准备才能考的更好...
  14. Mac上运行windows,你还在用双系统or虚拟机?
  15. springboot如何对本地数据库增删改查_mysql数据库基本增删改查操作总结
  16. 【视频图片网站源码】苹果cmsV10x影视源码[自适应+20个广告位]
  17. 视频追踪meanshift
  18. 3904三极管是什么功能_你了解三极管的种类吗
  19. 网络分析笔记11:2 Reassembled TCP Segments问题
  20. python-利用python写一个购物小程序

热门文章

  1. js中bind、call、apply函数的用法
  2. Linux 新增一个用户命令 adduser
  3. 大约xib连接错误bug正确
  4. 杂谈--从基数评估来看问题1
  5. solr dataimport 数据导入源码分析(二)
  6. JS的正则表达式[收藏]
  7. php 自定义文件后缀,自定义更改服务器asp/php/.net等文件后缀名
  8. 【控制】《多智能体系统一致性协同演化控制理论与技术》纪良浩老师-第9章-二阶连续时间时延多智能体系统加权一致性
  9. STM32 进阶教程 5 - 内联函数
  10. modelsim加入xilinx ISE库的方法