农民 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. 武士风度的牛相关推荐

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

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

  2. 188.武士风度的牛

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

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

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

  4. 188. 武士风度的牛 C++ bfs(宽度优先搜索)

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

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

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

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

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

  7. AcWing 188. 武士风度的牛

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

  8. 算法实践:武士风度的牛

    武士风度的牛 描述 这头神奇的牛像其它牛一样喜欢吃草,给你一张地图,上面标注了The Knight的开始位置,树.灌木.石头以及其它障碍的位置,除此之外还有一捆草.现在你的任务是,确定The Knig ...

  9. 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 ...

最新文章

  1. 50个Android开发人员必备UI效果源码[转载]
  2. 深入理解分布式技术 - 理论基石 CAP
  3. ubuntu20.04运行愤怒的小鸟
  4. 解决Linux 忘记root 密码的办法
  5. cocos2d-iphone 区分ipad和iphone
  6. 在WIN10中安装经典计算器
  7. 自己搭的12V 电机驱动电路设计
  8. 「云原生上云」后的聚石塔是如何应对 双11 下大规模应用挑战的
  9. VS 点击页面自动定位到解决方案资源管理器目录位置
  10. C++2.0 shared_ptr和weak_ptr深入刨析
  11. D-Link DP-LINK302打印服务器WIN7版软件
  12. 雷锋工厂模式(笔记)
  13. PLC PID控制优化系列之积分分离、变积分系数(FC)
  14. linux开放外部端口访问
  15. 易语言如何调用大漠插件
  16. 让蔡徐坤来教你实现游戏中的帧动画(上)
  17. python操作Excel,xlwings排序
  18. 判了!腾讯获赔 475 万!首例“微信自动抢红包”不正当竞争案宣判
  19. EXCEL VBA从入门到精通 第一章:VBA入门
  20. 85后老板打破传统老思维,打造一个让客户无法拒绝的方案!

热门文章

  1. 2020NISP一级(模拟题一)
  2. 计算机车辆识别检测毕业设计,计算机毕业设计(论文)-基于视频的车辆检测系统【全套设计】.doc...
  3. 羊了个羊品牌域名情况如何?
  4. 搭建直播平台过程中的全能“辅助”——流媒体服务器...
  5. 随堂笔记4——文本编辑器Vim
  6. Axure视频教程2:制作第一个原型
  7. 2023年全国最新二级建造师精选真题及答案1
  8. 虚拟机VMware安装XP系统错误解决办法
  9. 数据结构—排序(第九章)
  10. leetcode#66. Plus One