BFS 马的遍历————洛谷p1443

news/2024/9/22 11:18:38

马的遍历

题目描述

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

输入格式

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

输出格式

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

样例 #1

样例输入 #1

3 3 1 1

样例输出 #1

0    3    2    
3    -1   1    
2    1    4

提示

数据规模与约定

对于全部的测试点,保证 \(1 \leq x \leq n \leq 400\)\(1 \leq y \leq m \leq 400\)

问题分析

常规的bfs题,每次入队八个方向,并标记入队时的层数,该层数即为马跳过的步数,越早跳到,所花费的步数就越少

#include<iostream>
#include <iomanip>
#include<cstring>
#include<queue>
using namespace std;
int n, m, x, y;
bool flag[450][450];//判断是否走过
int step[450][450] ; //记录步数
int dir[8][8] = { {1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1} }; //八个方向
queue<pair<int, int> >que; //这两个连续的>>最好还是加个空格,有的系统里会报错
void bfs(int x, int y) {step[x][y] = 0;flag[x][y] = true;que.push(make_pair(x, y));while (!que.empty()) {pair<int, int>t = que.front();que.pop();//flag[t.first][t.second] = true; //一开始把标记写在这里,没注意马可能会往回跳,所以应该在入队时就标记for (int i = 0; i < 8; i++) {int nx = t.first + dir[i][0], ny = t.second + dir[i][1];if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && !flag[nx][ny]) {que.push(make_pair(nx, ny));flag[nx][ny] = true; //标记step[nx][ny] = step[t.first][t.second] + 1; //记录步数}}}
}int main() {cin >> n >> m >> x >> y;memset(flag, false, sizeof(flag));memset(step, -1, sizeof(step)); //初始化为-1bfs(x, y);for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cout << left << setw(5) << step[i][j]; //注意输出格式}cout << endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/63280.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Spring原理基础

Spring 高级 1 容器与Bean 1.1 接口容器 1.1.1 BeanFactory是什么 @SpringBootApplication public class ShowApplication {public static void main(String[] args) {ConfigurableApplicationContext context = SpringApplication.run(ShowApplication.class, args);/*** 1、…

springboot+vite 商品管理

SpringBoot + Vue3 +MySql5.7 +JDK8 一、 SpringBoot项目搭建 1 SpringBoot概述 1.1 SpringBoot 概念 SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻 辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而…

SaaS业务架构:业务能力分析

大家好,我是汤师爷~ 今天聊聊SaaS业务架构的业务能力分析。 业务能力概述 简单来说,业务能力是企业“做某事的能力”。 业务能力描述了企业当前和未来应对挑战的能力,即企业能做什么或需要做什么。业务能力建模的关键在于定义了企业做什么,而不是如何做(由业务流程描述)。…

Redis常见使用场景

Redis常见使用场景

学习vue——ref和$refs

一、获取dom 二、获取子组件的方法

正方形计数 题解

题意简述 给出一个 \(n \times n\) 的格点平面,有 \(q\) 次询问,求有多少正方形以 \((x, y)\) 为某一顶点,满足这个正方形顶点均在格点上,且边长为有理数。 \(l \leq 10^5\),\(q \leq 5 \times 10^5\)。 题目分析 看到边长为有理数,想到「毕达哥拉斯三元组」("Pyth…