188. 武士风度的牛
农民 John 有很多牛,他想交易其中一头被 Don 称为 The Knight 的牛。
这头牛有一个独一无二的超能力,在农场里像 Knight 一样地跳(就是我们熟悉的象棋中马的走法)。
虽然这头神奇的牛不能跳到树上和石头上,但是它可以在牧场上随意跳,我们把牧场用一个 x,y 的坐标图来表示。
这头神奇的牛像其它牛一样喜欢吃草,给你一张地图,上面标注了 The Knight 的开始位置,树、灌木、石头以及其它障碍的位置,除此之外还有一捆草。
现在你的任务是,确定 The Knight 要想吃到草,至少需要跳多少次。
The Knight 的位置用 K 来标记,障碍的位置用 * 来标记,草的位置用 H 来标记。
这里有一个地图的例子:
11 | . . . . . . . . . .10 | . . . . * . . . . . 9 | . . . . . . . . . . 8 | . . . * . * . . . . 7 | . . . . . . . * . . 6 | . . * . . * . . . H 5 | * . . . . . . . . . 4 | . . . * . . . * . . 3 | . K . . . . . . . . 2 | . . . * . . . . . * 1 | . . * . . . . * . . 0 ----------------------1 0 1 2 3 4 5 6 7 8 9 0
The Knight 可以按照下图中的 A,B,C,D… 这条路径用 5 次跳到草的地方(有可能其它路线的长度也是 5):
11 | . . . . . . . . . .10 | . . . . * . . . . .9 | . . . . . . . . . .8 | . . . * . * . . . .7 | . . . . . . . * . .6 | . . * . . * . . . F<5 | * . B . . . . . . .4 | . . . * C . . * E .3 | .>A . . . . D . . .2 | . . . * . . . . . *1 | . . * . . . . * . .0 ----------------------10 1 2 3 4 5 6 7 8 9 0
注意: 数据保证一定有解。
输入格式
第 1 行: 两个数,表示农场的列数 C 和行数 R。
第 2…R+1 行: 每行一个由 C 个字符组成的字符串,共同描绘出牧场地图。
输出格式
一个整数,表示跳跃的最小次数。
数据范围
1≤R,C≤150
输入样例:
10 11
..........
....*.....
..........
...*.*....
.......*..
..*..*...H
*.........
...*...*..
.K........
...*.....*
..*....*..
输出样例:
5
代码:
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> PII;
const int N = 210;
char g[N][N];
int dist[N][N];// 有st数组的作用
int n, m;
int ne[8][2] = {{-2, 1}, {-2, -1}, {-1, 2}, {-1, -2}, {1, 2}, {1, -2}, {2, 1}, {2, -1}};int bfs()
{int sx, sy;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++){if (g[i][j] == 'K')sx = i, sy = j;}queue<PII> qu;memset(dist, -1, sizeof(dist));dist[sx][sy] = 0;qu.push({sx, sy});while (qu.size()){PII t = qu.front();qu.pop();if (g[t.first][t.second] == 'H')return dist[t.first][t.second];for (int i = 0; i < 8; i++){int dx = t.first + ne[i][0], dy = t.second + ne[i][1];if (dx < 1 || dx > n || dy < 1 || dy > m)continue;if (g[dx][dy] == '*')continue;if (dist[dx][dy] != -1)continue;dist[dx][dy] = dist[t.first][t.second] + 1;qu.push({dx, dy});}}return -1;
}
int main()
{cin >> m >> n;for (int i = 1; i <= n; i++)cin >> g[i] + 1;cout << bfs() << endl;return 0;
}
188. 武士风度的牛相关推荐
- AcWing 188. 武士风度的牛(BFS,C++)
AcWing 188. 武士风度的牛 题意 从一个起点遵循某种特殊规则走到终点,求最短的步数 分析 很显然,这题是bfs思想的应用. 1.首先输入数据,并在每次输入数据时判断起点和终点的坐标. 2.初 ...
- 188.武士风度的牛
188.武士风度的牛 总结: 先找到进入floodfill的条件 然后加入把起点加入队列并进行标记 只要队列不空就对格子进行扩展(要除去自己因为自己已经被覆盖过了) 然后判定是否有效(是否超出范围,是 ...
- AcWing 188. 武士风度的牛 BFS 水题
题目描述 农民John有很多牛,他想交易其中一头被Don称为The Knight的牛. 这头牛有一个独一无二的超能力,在农场里像Knight一样地跳(就是我们熟悉的象棋中马的走法). 虽然这头神奇的牛 ...
- 188. 武士风度的牛 C++ bfs(宽度优先搜索)
农民John有很多牛,他想交易其中一头被Don称为The Knight的牛. 这头牛有一个独一无二的超能力,在农场里像Knight一样地跳(就是我们熟悉的象棋中马的走法). 虽然这头神奇的牛不能跳到树 ...
- 188 武士风度的牛(bfs)
1. 问题描述: 农民 John 有很多牛,他想交易其中一头被 Don 称为 The Knight 的牛.这头牛有一个独一无二的超能力,在农场里像 Knight 一样地跳(就是我们熟悉的象棋中马的走法 ...
- 算法提高课-搜索-最短路模型-AcWing 188. 武士风度的牛 :bfs、dist数组记录最小步数
题目分析 来源:acwing 分析:马走日,这里用bfs遍历马的行走过程,输出到达终点的最小步数. 使用bfs求到每个点的最小步数,需要开一个dist[][]数组,来记录起点到某点的最小步数. 队列里 ...
- AcWing 188. 武士风度的牛
知识点:广搜 李煜东的例题讲的那么难,习题确这么简单,不过这个样子也对,把最精华的东西放到例题里面好好讲讲 #include <bits/stdc++.h>using namespace ...
- 算法实践:武士风度的牛
武士风度的牛 描述 这头神奇的牛像其它牛一样喜欢吃草,给你一张地图,上面标注了The Knight的开始位置,树.灌木.石头以及其它障碍的位置,除此之外还有一捆草.现在你的任务是,确定The Knig ...
- CH2906 武士风度的牛 BFS
题目链接 http://noi-test.zzstep.com/contest/0x29%E3%80%8C%E6%90%9C%E7%B4%A2%E3%80%8D%E7%BB%83%E4%B9%A0/2 ...
最新文章
- 50个Android开发人员必备UI效果源码[转载]
- 深入理解分布式技术 - 理论基石 CAP
- ubuntu20.04运行愤怒的小鸟
- 解决Linux 忘记root 密码的办法
- cocos2d-iphone 区分ipad和iphone
- 在WIN10中安装经典计算器
- 自己搭的12V 电机驱动电路设计
- 「云原生上云」后的聚石塔是如何应对 双11 下大规模应用挑战的
- VS 点击页面自动定位到解决方案资源管理器目录位置
- C++2.0 shared_ptr和weak_ptr深入刨析
- D-Link DP-LINK302打印服务器WIN7版软件
- 雷锋工厂模式(笔记)
- PLC PID控制优化系列之积分分离、变积分系数(FC)
- linux开放外部端口访问
- 易语言如何调用大漠插件
- 让蔡徐坤来教你实现游戏中的帧动画(上)
- python操作Excel,xlwings排序
- 判了!腾讯获赔 475 万!首例“微信自动抢红包”不正当竞争案宣判
- EXCEL VBA从入门到精通 第一章:VBA入门
- 85后老板打破传统老思维,打造一个让客户无法拒绝的方案!
热门文章
- 2020NISP一级(模拟题一)
- 计算机车辆识别检测毕业设计,计算机毕业设计(论文)-基于视频的车辆检测系统【全套设计】.doc...
- 羊了个羊品牌域名情况如何?
- 搭建直播平台过程中的全能“辅助”——流媒体服务器...
- 随堂笔记4——文本编辑器Vim
- Axure视频教程2:制作第一个原型
- 2023年全国最新二级建造师精选真题及答案1
- 虚拟机VMware安装XP系统错误解决办法
- 数据结构—排序(第九章)
- leetcode#66. Plus One