当前位置: 首页 > article >正文

【蓝桥杯】马的遍历

马的遍历

题目描述

有一个 n × m n \times m n×m 的棋盘,在某个点 ( x , y ) (x, y) (x,y) 上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步。

输入格式

输入只有一行四个整数,分别为 n , m , x , y n, m, x, y n,m,x,y

输出格式

一个 n × m n \times m n×m 的矩阵,代表马到达某个点最少要走几步(不能到达则输出 − 1 -1 1)。

样例 #1

样例输入 #1

3 3 1 1

样例输出 #1

0    3    2    
3    -1   1    
2    1    4

提示

数据规模与约定

对于全部的测试点,保证 1 ≤ x ≤ n ≤ 400 1 \leq x \leq n \leq 400 1xn400 1 ≤ y ≤ m ≤ 400 1 \leq y \leq m \leq 400 1ym400

AC代码:

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int N = 510;
int ans[N][N],n,m,x,y;
const int dx[8] = { -1,-2,-2,-1,1,2,2,1 };
const int dy[8] = { 2,1,-1,-2,2,1,-1,-2 };
typedef pair<int, int>PII;//开一个可以存两个int的变量,用于存坐标(x,y)
queue<PII> q;

void bfs()
{
	//队列非空
	while (!q.empty())
	{
		auto now = q.front();//记录下当前队列首元素
		q.pop();//将队列的首元素弹出
		int d = ans[now.first][now.second];
		for (int i = 0; i < 8; i++)
		{
			int ax = now.first + dx[i];
			int ay = now.second + dy[i];
			//如果跨过边界了或者当前位置访问过了,就直接continue不管
			if (ax<1 || ax>n || ay<1 || ay>m || ans[ax][ay] != -1)
				continue;
			ans[ax][ay] = d + 1;//在上一次的距离加上1
			q.push({ ax,ay });//继续入队列
		}
	}
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= m; j++)
		{
			printf("%-5d", ans[i][j]);
		}
		puts("");
	}
}

int main(void)
{
	cin >> n >> m >> x >> y;
	memset(ans, -1,sizeof ans);//没有访问就标记为-1
	ans[x][y] = 0;//从[x,y]走的,当前格子步数就是0
	q.push({ x,y });//将[x,y]坐标加入到队列当中
	bfs();
	return 0;
}


http://www.kler.cn/a/159009.html

相关文章:

  • Unity3D 完整直升机控制器(虚拟仿真级别)
  • Typescript中的keyof类型操作符详解
  • AWTK-WIDGET-WEB-VIEW 实现笔记 (4) - Ubuntu
  • 跨平台WPF框架Avalonia教程 十五
  • ElasticSearch学习笔记二:使用Java客户端
  • 【Oracle篇】掌握SQL Tuning Advisor优化工具:从工具使用到SQL优化的全方位指南(第六篇,总共七篇)
  • 单机无锁线程安全队列-Disruptor
  • Django回顾6
  • Perl | Multi-line Strings | Here Document
  • 十种接口安全方案!!!
  • 解密IIS服务器API跨域问题的终极解决方案
  • CENTOS 7 添加黑名单禁止IP访问服务器
  • 云计算与低代码:加速应用开发与创新的双核引擎
  • CAD画图-模型和布局区别,视图命令MV使用(用于局部放大显示)
  • 【ArcGIS Pro】探索性插值无法覆盖所需shp范围
  • python基于轻量级卷积神经网络模型ShuffleNetv2开发构建辣椒病虫害图像识别系统
  • Landsat 5 C02数据集2007-2011年
  • 通俗讲解分布式锁:场景和使用方法
  • Python---魔术方法
  • 在AWS EC2中部署和使用Apache Superset的方案
  • 【开源】基于JAVA的校园疫情防控管理系统
  • JeecgBoot 框架升级 Spring Boot 3.1.5
  • ifstream读取txt中的中文数据转成QString出现乱码
  • ArcGIS点集之间两两连线
  • CMake中的include函数
  • vue3项目实现文档 JSON 格式和 Excel 表格的在线预览,(智能搜索,未验证)