188. 武士风度的牛 C++ bfs(宽度优先搜索)
农民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(宽度优先搜索)相关推荐
- 188 武士风度的牛(bfs)
1. 问题描述: 农民 John 有很多牛,他想交易其中一头被 Don 称为 The Knight 的牛.这头牛有一个独一无二的超能力,在农场里像 Knight 一样地跳(就是我们熟悉的象棋中马的走法 ...
- 算法提高课-搜索-最短路模型-AcWing 188. 武士风度的牛 :bfs、dist数组记录最小步数
题目分析 来源:acwing 分析:马走日,这里用bfs遍历马的行走过程,输出到达终点的最小步数. 使用bfs求到每个点的最小步数,需要开一个dist[][]数组,来记录起点到某点的最小步数. 队列里 ...
- AcWing 188. 武士风度的牛(BFS,C++)
AcWing 188. 武士风度的牛 题意 从一个起点遵循某种特殊规则走到终点,求最短的步数 分析 很显然,这题是bfs思想的应用. 1.首先输入数据,并在每次输入数据时判断起点和终点的坐标. 2.初 ...
- 188.武士风度的牛
188.武士风度的牛 总结: 先找到进入floodfill的条件 然后加入把起点加入队列并进行标记 只要队列不空就对格子进行扩展(要除去自己因为自己已经被覆盖过了) 然后判定是否有效(是否超出范围,是 ...
- 【BFS宽度优先搜索】
一.求所有顶点到s顶点的最小步数 1 //BFS宽度优先搜索 2 #include<iostream> 3 using namespace std; 4 #include<que ...
- 搜索入门之BFS宽度优先搜索
基础搜索入门BFS BFS全称宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型.Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽 ...
- AcWing 188. 武士风度的牛 BFS 水题
题目描述 农民John有很多牛,他想交易其中一头被Don称为The Knight的牛. 这头牛有一个独一无二的超能力,在农场里像Knight一样地跳(就是我们熟悉的象棋中马的走法). 虽然这头神奇的牛 ...
- 188. 武士风度的牛
农民 John 有很多牛,他想交易其中一头被 Don 称为 The Knight 的牛. 这头牛有一个独一无二的超能力,在农场里像 Knight 一样地跳(就是我们熟悉的象棋中马的走法). 虽然这头神 ...
- AcWing 188. 武士风度的牛
知识点:广搜 李煜东的例题讲的那么难,习题确这么简单,不过这个样子也对,把最精华的东西放到例题里面好好讲讲 #include <bits/stdc++.h>using namespace ...
最新文章
- android程序贴吧,【Android 教程总结贴】归纳所有android贴
- CTFshow 文件包含 web79
- 算法_Longest Palindromic Substring(寻找最长回文字串)
- android 文件读写
- 2018/11/29 一个64位操作系统的设计与实现 03 (在Bochs上运行Boot程序)
- Android主题换肤实现
- Git笔记(29) 搜索
- 【华为云技术分享】云小课 | SAP S/4HANA高可用之实战演练
- 设计模式,你知道什么是Observer模式吗?
- 机器学习中的算法——决策树模型组合之随机森林与GBDT
- smalot-bootstrap-datetimepicker 使用心得
- SiTime 硅晶振抖动定义和测量方法
- git bash批量dos2unix
- python 曲线拟合 画图+公式
- 为什么说跳槽加薪低于30%,等于在“降薪”?
- 褚时健去世,柳传志发悼词:我非常钦佩褚老
- Ubuntu16.04安装ftp配置
- 【sdx62】XBL设置共享内存变量,然后内核层获取变量实现
- 经典的排错过程 expected unqualified-id before string constant
- Xcode 4.1~4.6 + iOS 5、iOS 6免证书(iDP)开发+真机调试+生成IPA全攻略