P1443 马的遍历题解

题目

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

输入输出格式

输入格式

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

输出格式

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

输入输出样例

输入样例

3 3 1 1

输出样例

0    3    2    
3    -1   1    
2    1    4    

解析

这道题目使用的是广度优先搜索,会优先考虑每种状态和初始状态的距离,形象点说,与初始状态越接近的情况就会越先考虑。再具体一点:每个时刻(阶段)要做的事情就是从上个时刻(阶段)每个状态扩展出新的状态。

广度优先搜索使用队列实现:先将初始状态加入到空的队列中,然后每次去除队首,找出队首所能转移到的状态,再将其压入队列;如此反复,直到对列为空。这样就能保证一个状态在被访问的时候一定是采用的最短路径。

广度优先搜索的一般形式如下:

Q.push(初始状态);//将初始状态入队
while(!Q.empty()){Statue u = Q.front();//取出队首Q.pop();//出队for(枚举所有可扩展状态){if(是合法的){Q.push(v);//入队}}
}

对于此问题,先建立一个结构体数组用于存储扩展的结点。先让起点入队,然后在队列取状态逐个扩展。代码如下:

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#define maxn 310
using namespace std;
struct coord{int x,y;//一个结构体存储x,y两个坐标 
};
queue<coord> Q;
int ans[maxn][maxn];//记录到每一个点的最小步数,-1表示未访问
int walk[8][2]={{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};//马能走的8个方向
int main(){int n,m,sx,sy;memset(ans,-1,sizeof(ans));cin>>n>>m>>sx>>sy;coord tmp={sx,sy};//使起点入队扩展Q.push(tmp);ans[sx][sy]=0;while(!Q.empty()){coord u=Q.front();//拿出队首以扩展int ux=u.x,uy=u.y;Q.pop();for(int k=0;k<8;k++){int x=ux+walk[k][0],y=uy+walk[k][1];int d=ans[ux][uy];if(x<1||x>n||y<1||y>m||ans[x][y]!=-1){continue;}ans[x][y]=d+1;//记录答案,是上一个点多走一步的结果coord tmp={x,y};Q.push(tmp);} } for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){printf("%-5d",ans[i][j]);//-号靠左对齐}cout<<endl;}return 0;
} 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DC与DCT DCG的区别

先进工艺不再wire load model进行静态时序分析&#xff0c;否则综合结果与后端物理电路差距很大&#xff0c;因此DC综合工具也进行了多次迭代&#xff0c;DC工具有两种模式&#xff0c;包括wire load mode和Topographical Mode&#xff0c;也就是对应的DC Expert和DC Ultra。 …

python有哪些应用

Python是一种功能强大且灵活的编程语言&#xff0c;具有广泛的应用领域。以下是Python常见的一些应用&#xff1a; Web开发&#xff1a; Python常用于构建Web应用程序。流行的Web框架包括Django、Flask和Pyramid等&#xff0c;它们提供了强大的工具和库来简化开发过程。 数据科…

unity hub (第一部)初学配置

1、安装Unity Hub 2、设置中文 3、安装编辑器 4、新建项目 5、新建完成后进入编辑器 6、 编辑器设置中文 editPreferencesLanguages选择中文

【Webpack】Webpack 优化

提升开发体验 使用 Source Map 让开发或上线时代码报错能有更加准确的错误提示。 提升 webpack 提升打包构建速度 使用 HotModuleReplacement 让开发时只重新编译打包更新变化了的代码&#xff0c;不变的代码使用缓存&#xff0c;从而使更新速度更快。使用 OneOf 让资源文件…

机器学习基础(五)监督与非监督学习的结合

导语&#xff1a;上一节我们详细探索非监督学习的进阶应用&#xff0c;详情可见&#xff1a; 机器学习基础&#xff08;四&#xff09;非监督学习的进阶探索-CSDN博客文章浏览阅读613次&#xff0c;点赞15次&#xff0c;收藏13次。非监督学习像一位探险家&#xff0c;挖掘未标…

C语言实现五子棋小游戏

代码采用C语言编写&#xff0c;结合图形库&#xff0c;实现五子棋小游戏&#xff0c;代码如下&#xff1a; #include<fstream> #include <stdlib.h> #include <graphics.h> #include <stdio.h> #include<bits/stdc.h> #include <windows.h&…

电路设计(25)——4位数字频率计的multisim仿真及PCB设计

1.设计要求 使用4位数码管&#xff0c;显示输入信号的频率。完成功能仿真后&#xff0c;用AD软件&#xff0c;画出原理图以及PCB。 2.电路设计 输入信号的参数为&#xff1a; 可见&#xff0c;输入为168HZ&#xff0c;测量值为170HZ&#xff0c;误差在可接受的范围内。 3.PCB设…

Bluesky数据采集框架-2

访问保存的数据 到此&#xff0c;自然想到了"我如何访问我保存的数据&#xff1f;"。从bluesky的视角&#xff0c;那真的不是bluesky的关注&#xff0c;但它是一个合理的问题&#xff0c;因此我们将强调一个特定的场景。 注意&#xff1a;本章假设你正在使用databr…

从零开始手写mmo游戏从框架到爆炸(二十)— 战斗系统一

导航&#xff1a;从零开始手写mmo游戏从框架到爆炸&#xff08;零&#xff09;—— 导航-CSDN博客 规则 我们现在设计并尝试开发战斗系统。战斗系统我们先设定几个规则 1、多人对多人&#xff1a;英雄可以携带宝宝&#xff0c;面对的野怪也可以是成群的&#xff0…

C++ //练习 8.3 什么情况下,下面的while循环会终止?

C Primer&#xff08;第5版&#xff09; 练习 8.3 练习 8.3 什么情况下&#xff0c;下面的while循环会终止&#xff1f; while(cin>>i) /* ... */环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 解释 当输入条件不为真的时候&am…

AI:134-基于深度学习的社交媒体图像内容分析

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

【右一的电子笔记】全导航,持续更新...

文章目录 &#x1f4da;计算机基础&#x1f407;高程&#xff08;c&#xff09;&#x1f407;python基础&#x1f407;数据结构&#x1f407;数据库系统概念&#x1f407;计算机网络&#x1f407;计算机组成原理&#x1f407;操作系统 &#x1f4da;大数据&#x1f407;大数据管…

C语言——实用调试技巧——第2篇——(第23篇)

坚持就是胜利 文章目录 一、实例二、如何写出好&#xff08;易于调试&#xff09;的代码1、优秀的代码2、示范&#xff08;1&#xff09;模拟 strcpy 函数方法一&#xff1a;方法二&#xff1a;方法三&#xff1a;有弊端方法四&#xff1a;对方法三进行优化assert 的使用 方法五…

Spring之AOP源码解析(下)

前言 在上一遍文章中,我们主要讲解了ProxyFactory在Spring完成AOP动态代理的过程中发挥的作用。这一篇我们主要讲解这些注解都是如何注入Advisors,然后分析这些Advisors生效的条件 注解都是如何注入Advisor并匹配的 EnableTransactionManagement注解 我们在之前提到EnableT…

C++ const关键字

在C中&#xff0c;const是一个关键字&#xff0c;用于声明常量或者修饰变量、指针、引用等&#xff0c;表示其数值是不可修改的。const关键字的主要作用包括一下几个方面&#xff1a; 一、修饰基本数据类型 基本数据类型&#xff0c;修饰符const可以用在类型说明符前&#xf…

STM32 TCP实现OTA

芯片&#xff1a;stm32f407 开发平台&#xff1a;stm32cubeide 上位机开发平台&#xff1a;visual studio 2017 1. FLASH分配 将flash划分为四个部分&#xff1a; bootloader: 0x8000000-0x800ffff app1: 0x8010000-0x805ffff app2: …

一流的财务:搞数据!!!(干货)

“三流财务给数据&#xff0c;二流财务给分析报告&#xff0c;一流财务给....&#xff08;解决方案&#xff09;“这些文章应该很多人都看到过&#xff0c;这个口号粗看好像很有道理&#xff0c;但笔者并不认同&#xff0c;因为大家都忽略了一个重要的概念&#xff1a;数据&…

什么是rouge metric

采用分类任务的指标评估生成任务的问题 举个例子&#xff0c;在一个seq2seq模型中&#xff0c;黄金标签是“police killed the gunman”&#xff0c;模型输出是"the gunman police killed"&#xff0c;两句话的意思是有差别的&#xff0c;但是从unigram的角度&#…

数字化浪潮下的企业变革:深度解析ERP的崭新篇章

引言&#xff1a; 随着科技的飞速发展&#xff0c;企业正迎来前所未有的数字化浪潮。在这个数字时代&#xff0c;企业资源规划&#xff08;ERP&#xff09;被认为是企业应对挑战、实现创新的重要工具。本文将深入研究ERP的发展历程&#xff0c;聚焦不同行业和场景下的创新应用…

Atomic-flag-tutorial

本文介绍 <atomic> 头文件中最简单的原子类型: atomic_flag。atomic_flag 一种简单的原子布尔类型&#xff0c;只支持两种操作&#xff0c;test_and_set 和 clear。 std::atomic_flag 详解 std::atomic_flag 构造函数 std::atomic_flag 构造函数如下&#xff1a; ato…