【蓝桥杯】马的遍历

马的遍历

题目描述

有一个 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;
}

相关推荐

  1. 2023-12-06 12:16:03       30 阅读
  2. 【备战】图问题

    2023-12-06 12:16:03       48 阅读
  3. 倒计时47天!DFS基础——图

    2023-12-06 12:16:03       42 阅读
  4. 刷题-06-砍树-图DFS⭐⭐⭐⭐

    2023-12-06 12:16:03       35 阅读
  5. 洛谷 1443.

    2023-12-06 12:16:03       40 阅读
  6. 1143bfs

    2023-12-06 12:16:03       40 阅读
  7. P1443

    2023-12-06 12:16:03       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-06 12:16:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-06 12:16:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-06 12:16:03       82 阅读
  4. Python语言-面向对象

    2023-12-06 12:16:03       91 阅读

热门阅读

  1. Spring Boot项目Service类单元测试自动生成

    2023-12-06 12:16:03       49 阅读
  2. 网络编程HTTP协议进化史

    2023-12-06 12:16:03       63 阅读
  3. 计算机设计大赛 选题推荐

    2023-12-06 12:16:03       68 阅读
  4. 【Rust】结构体与枚举

    2023-12-06 12:16:03       43 阅读
  5. 嵌入式C语言中的关键字volatile

    2023-12-06 12:16:03       56 阅读
  6. Quartus II 13.1入门使用方法

    2023-12-06 12:16:03       53 阅读
  7. 基于FPGA的数字时钟设计与实现(含源码)

    2023-12-06 12:16:03       64 阅读