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

CSP/信奥赛C++刷题训练:经典广搜例题(1):洛谷P1443 :马的遍历

CSP/信奥赛C++刷题训练:经典广搜例题(1):洛谷P1443 :马的遍历

在这里插入图片描述

题目描述

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

使用广搜解题

#include<bits/stdc++.h>
using namespace std;
int n,m,x,y; 
int a[410][410];//棋盘
int b[410][410];//最少步数
int q[160010][2];//队列 
int dx[8]={-2,-2,-1,1,2,2,1,-1};
int dy[8]={-1,1,2,2,1,-1,-2,-2}; 
void bfs(int x,int y){
	int head=1,tail=1;
	q[1][0]=x;//起点入队 
	q[1][1]=y; 
	a[x][y]=1;//标记起点走过
	b[x][y]=0;//起点步数为0
	while(head<=tail){
		int nowx=q[head][0];//当前点 
		int nowy=q[head][1];
		for(int i=0;i<=7;i++){
			int nx=nowx+dx[i];//新点 
			int ny=nowy+dy[i];
			if(nx>=1 && nx<=n && ny>=1 && ny<=m && a[nx][ny]==0){
				tail++;
				q[tail][0]=nx;//新点入队 
				q[tail][1]=ny;
				a[nx][ny]=1;//标记新点走过
				b[nx][ny]=b[nowx][nowy]+1;//更新步数 
			}
		}
		head++;//队首出队 
	} 
}
int main(){
	cin>>n>>m>>x>>y;
	memset(b,-1,sizeof(b));//初始化b数组
	bfs(x,y);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cout<<b[i][j]<<" ";
		}
		cout<<endl;
	} 
	return 0;
} 

文末彩蛋:

点击王老师青少年编程主页有更多精彩内容


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

相关文章:

  • 怎么实现柔性动态自适应IVR功能
  • 《LangChain大模型应用开发》书籍分享
  • GhostRace: Exploiting and Mitigating Speculative Race Conditions-记录
  • CLION中运行远程的GUI程序
  • 不会心理描写,神态描写怎么办?
  • 【系统】Windows11更新解决办法,一键暂停
  • CISAW-PIS——个人信息安全
  • 数字后端零基础入门系列 | Innovus零基础LAB学习Day9
  • 理解 WordPress | 第二篇:结构化分析
  • 山东路远生态科技有限公司竣工投产仪式暨产品发布会圆满举行
  • C#-类:索引器
  • 论文阅读笔记:Activating More Pixels in Image Super-Resolution Transformer
  • 关于我、重生到500年前凭借C语言改变世界科技vlog.15——深入理解指针(4)
  • 《AI在企业战略中的关键地位:以微软和阿里为例》
  • SAP ABAP开发学习——RFC
  • 西南科技大学C++作业1——组合依赖关系实验代码
  • CTF中的phar反序列化 [SWPU 2018]SimplePHP
  • 搜维尔科技:使用Sensglove Nova2触觉反馈手套遥操作机器人操作
  • 深度学习框架1
  • 从 HTTP 到 HTTPS 再到 HSTS:网站安全的演变与实践
  • 密码学知识点整理一:密码学概论
  • C语言 — 指针的进阶
  • c语言简单编程练习9
  • 剧本杀小程序,市场发展下的新机遇
  • 鸿蒙HarmonyOS NEXT应用层架构
  • SpringBoot源码解析(一):SpringApplication构造方法