农民John有很多牛,他想交易其中一头被Don称为The Knight的牛。

这头牛有一个独一无二的超能力,在农场里像Knight一样地跳(就是我们熟悉的象棋中马的走法)。

虽然这头神奇的牛不能跳到树上和石头上,但是它可以在牧场上随意跳,我们把牧场用一个x,y的坐标图来表示。

这头神奇的牛像其它牛一样喜欢吃草,给你一张地图,上面标注了The Knight的开始位置,树、灌木、石头以及其它障碍的位置,除此之外还有一捆草。

现在你的任务是,确定The Knight要想吃到草,至少需要跳多少次。

The Knight的位置用’K’来标记,障碍的位置用’*’来标记,草的位置用’H’来标记。

这里有一个地图的例子:

The Knight 可以按照下图中的A,B,C,D…这条路径用5次跳到草的地方(有可能其它路线的长度也是5):

注意: 数据保证一定有解。

输入格式:

第1行: 两个数,表示农场的列数C(C<=150)和行数R(R<=150)。

第2…R+1行: 每行一个由C个字符组成的字符串,共同描绘出牧场地图。

输出格式:

一个整数,表示跳跃的最小次数。

输入样例:

10 11
..........
....*.....
..........
...*.*....
.......*..
..*..*...H
*.........
...*...*..
.K........
...*.....*
..*....*..

输出样例:

5

一般来说走迷宫,最少步数这种题目,都是广度优先搜索.记住读入上面的有梗,然后修改一下一般走路方式就好了.

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N = 155;
int m,n;
int gx,gy;
int ga,gb;
char g[N][N];
int dist[N][N];
int dx[8]={-1,-2,-2,-1,1,2,2,1},dy[8]={-2,-1,1,2,2,1,-1,-2};
int bfs()
{memset(dist,-1,sizeof dist);dist[gx][gy]=0;queue<PII> q;q.push({gx,gy});while(q.size()){auto t = q.front();q.pop();for(int i=0;i<8;i++){int x=t.first+dx[i],y=t.second+dy[i];if(x>=1 && x<=n && y>=0 && y<=m && dist[x][y]==-1 && g[x][y]!='*'){dist[x][y]=dist[t.first][t.second]+1;q.push({x,y});if(x==ga && y==gb) return dist[x][y];}}}}
int main()
{scanf("%d%d",&m,&n);for(int i=1;i<=n;i++) scanf("%s",g[i]+1);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){if(g[i][j]=='K'){gx=i,gy=j;}if(g[i][j]=='H'){ga=i,gb=j;}}cout<<bfs();return 0;
}

188. 武士风度的牛 C++ bfs(宽度优先搜索)相关推荐

  1. 188 武士风度的牛(bfs)

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

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

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

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

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

  4. 188.武士风度的牛

    188.武士风度的牛 总结: 先找到进入floodfill的条件 然后加入把起点加入队列并进行标记 只要队列不空就对格子进行扩展(要除去自己因为自己已经被覆盖过了) 然后判定是否有效(是否超出范围,是 ...

  5. 【BFS宽度优先搜索】

    一.求所有顶点到s顶点的最小步数   1 //BFS宽度优先搜索 2 #include<iostream> 3 using namespace std; 4 #include<que ...

  6. 搜索入门之BFS宽度优先搜索

    基础搜索入门BFS BFS全称宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型.Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽 ...

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

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

  8. 188. 武士风度的牛

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

  9. AcWing 188. 武士风度的牛

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

最新文章

  1. android程序贴吧,【Android 教程总结贴】归纳所有android贴
  2. CTFshow 文件包含 web79
  3. 算法_Longest Palindromic Substring(寻找最长回文字串)
  4. android 文件读写
  5. 2018/11/29 一个64位操作系统的设计与实现 03 (在Bochs上运行Boot程序)
  6. Android主题换肤实现
  7. Git笔记(29) 搜索
  8. 【华为云技术分享】云小课 | SAP S/4HANA高可用之实战演练
  9. 设计模式,你知道什么是Observer模式吗?
  10. 机器学习中的算法——决策树模型组合之随机森林与GBDT
  11. smalot-bootstrap-datetimepicker 使用心得
  12. SiTime 硅晶振抖动定义和测量方法
  13. git bash批量dos2unix
  14. python 曲线拟合 画图+公式
  15. 为什么说跳槽加薪低于30%,等于在“降薪”?
  16. 褚时健去世,柳传志发悼词:我非常钦佩褚老
  17. Ubuntu16.04安装ftp配置
  18. 【sdx62】XBL设置共享内存变量,然后内核层获取变量实现
  19. 经典的排错过程 expected unqualified-id before string constant
  20. Xcode 4.1~4.6 + iOS 5、iOS 6免证书(iDP)开发+真机调试+生成IPA全攻略

热门文章

  1. 【Java进阶营】Java是什么?Java的特点有哪些?
  2. Pandas:深市股票代码前补足0
  3. 2019.8.设计菜单,完成简单计算器功能。要求:设计5个菜单项,功能分别为加减乘除。
  4. 自定义ro.build.fingerprint
  5. 一款功能强大的 IP 查询工具!开源,放心用
  6. 论文阅读:CNN+GCN
  7. IDEA Material Theme UI 暗黑系主题的安装
  8. APP被苹果 App Store拒之门外的79个原因!
  9. 【机器学习实战】美国波斯顿房价预测
  10. 电池极耳尺寸视觉检测系统