AcWing 188. 武士风度的牛

题意

从一个起点遵循某种特殊规则走到终点,求最短的步数

分析

很显然,这题是bfs思想的应用。
1.首先输入数据,并在每次输入数据时判断起点和终点的坐标。
2.初始化队列,从起点开始按照规则进行遍历。规则是按照中国象棋马的走法,马在上下左右这四个基本方向上可以再往两个斜边走
3.每次遍历坐标都要检查坐标是否合法,是否是障碍,是否之前被遍历过(因为这题是从中心向四周扩散,如果当前坐标已被标记了,那么就说明路径往回走了,就说明走重复了,也就说明不是最短路)
4.对坐标进行应有的操作,在这道题中,是对原来坐标可以走的步数+1,并判断是否找到终点
PS: 这题有个巨坑,输入数据的第一个竟然是列数!!!

代码

#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>using namespace std;
typedef pair<int,int> PII;int n, m;//n为行数,m为列数//dx和dy是偏移量数组
int dx[] = {-2, -2, 2, 2, -1, -1, 1, 1};
int dy[] = {-1, 1, -1, 1, -2, 2, -2, 2};//g为地图数组
char g[155][155];//q为进行广度优先搜索的队列
queue<PII> q;//d数组记录了从起点到当前点走过的步数
int d[155][155];int ans;void bfs(PII start, PII end) {q.push(start);//将起始位置入队memset(d, -1, sizeof d);d[start.first][start.second] = 0;//只要队列不为空while (q.size()) {PII t = q.front();//取出队头q.pop();         //队头出队//如果当前位置就是终点位置,则输出最小步数且结束程序if (t == end){cout << d[t.first][t.second];return;}//遍历当前位置的8个可能走向for (int i = 0; i < 8; i++) {int x = t.first + dx[i], y = t.second + dy[i];if (x < 0 || x >= n || y < 0 || y >= m || g[x][y] == '*' || d[x][y] != -1)continue;//符合条件,则当前位置入队q.push({x, y});d[x][y] = d[t.first][t.second] + 1 ;}}
}
int main() {cin >> m >> n;//start为牛的起始位置,end是草的位置PII start, end;for (int i = 0; i < n; i++)for (int j = 0; j < m; j++) {scanf(" %c", &g[i][j]);if (g[i][j] == 'K') start = {i, j};if (g[i][j] == 'H') end = {i, j};}bfs(start, end);return 0;
}

AcWing 188. 武士风度的牛(BFS,C++)相关推荐

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

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

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

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

  3. AcWing 188. 武士风度的牛

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

  4. 188.武士风度的牛

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

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

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

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

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

  7. 188. 武士风度的牛

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

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

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

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

最新文章

  1. 根据JSON自动生成select联动
  2. pocoserver无限重启_poco相机老版本
  3. 根据端口不同来切换站点_KVM切换器是什么,看懂这一篇就够
  4. iphone怎么分屏_问答 | Mac 应用商店中无法”获取“软件怎么办?
  5. 搭建Jenkins+Sonarqub+Mysql+Android(上篇)
  6. C和C++语言编程里面常用函数或者编程技巧总结(不断更新)
  7. struts+hibernate+oracle+easyui实现lazyout组件的简单案例——DeptDao层代码
  8. 织梦dedecms模板--物流快递网站模板源码-带手机版数据同步
  9. linux下找不到sqlite3头文件,关于CentOS 7下sqlite3找不到的问题解决
  10. spring-boot(2)--环境搭建
  11. 在django项目中使用django-ckeditor
  12. 中心药库管理系统 v6.85 是什么
  13. 总结陈丹琦博士论文(一):NEURAL READING COMPREHENSION AND BEYOND
  14. CAS (4) —— CAS浏览器SSO访问顺序图详解(CAS Web Flow Diagram by Example)
  15. windows 8.1 关机
  16. MySQL入门系列:视图
  17. 组合数 Counting Arrays
  18. 一款Java开源的SpringBoot即时通讯IM 聊天系统
  19. 转:查尔斯·汉迪:你是谁,比你做什么更重要
  20. 推荐算法工程师面试准备

热门文章

  1. 转发器、集线器、网桥、交换机的区别
  2. 实践:链表实现控制台通讯录(C++)
  3. php跨域解决办法,PHP跨域问题解决方案
  4. html修改表单样式,HTML 样式 表单
  5. 企业防病毒服务器部署介绍
  6. 【SPSS】频数分析和基本描述统计量详细操作教程(附实战案例)
  7. python学习笔记---IO编程【廖雪峰】
  8. Selenium2相关知识最全总结
  9. 贷款需要查询个人征信报告?-民兴商学院
  10. java虚拟机有哪几部分组成,Java虚拟机基本结构