首页 > 其他分享 >2733: 【搜索】【广度优先】 马遍历棋盘

2733: 【搜索】【广度优先】 马遍历棋盘

时间:2024-03-18 20:31:02浏览次数:29  
标签:遍历 temp 2733 int nx ny 401 front 广度

题目描述

有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步

输入

一行四个数据,棋盘的大小和马的坐标

输出

一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1)

样例输入

4 4 1 1

样例输出

0    3    2    5
3    4    1    2
2    1    4    3
5    2    3    2

Code:

#include<bits/stdc++.h>
using namespace std;
struct node{
	int x,y;
}temp,front;
int dx[4]={1,-1,2,-2};
int dy[4]={1,-1,2,-2};
int a[401][401];
bool vis[401][401];
int n,m;
void bfs(int x,int y,int step){
	a[x][y]=step;
	vis[x][y]=true;
	queue<node>Q;
	temp.x=x;
	temp.y=y;
	Q.push(temp);
	while(!Q.empty()){
		front=Q.front();
		Q.pop();
		for(int i=0;i<4;i++){
			for(int j=0;j<4;j++){
				if(abs(dx[i])!=abs(dy[j])){
					int nx=front.x+dx[i];
					int ny=front.y+dy[j];
					if(nx<1||nx>n||ny<1||ny>m){
						continue;
					}
					if(!vis[nx][ny]){
						temp.x=nx;
						temp.y=ny;
						Q.push(temp);
						vis[nx][ny]=true;
						a[nx][ny]=a[front.x][front.y]+1;
					}
				}
			}
		}
	}
}
int main(){
	memset(a,-1,sizeof(a));
	int x,y;
	cin>>n>>m>>x>>y;
	bfs(x,y,0);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			printf("%-5d",a[i][j]);
		}
		cout<<endl;
	}
	return 0;
}

标签:遍历,temp,2733,int,nx,ny,401,front,广度
From: https://blog.csdn.net/yangrenrui/article/details/136820159

相关文章

  • 力扣---验证二叉搜索树---前根/中根/后根遍历
     题目解析参考:验证二叉搜索树_哔哩哔哩_bilibili一开始做呢,就跟这位老兄一样:因为没有考虑到5和3的比较接下来走入整体:先根遍历解法:首先 每个点其实都有范围,比如根节点的范围在(-INF,INF),就拿上面图片举例子,4这个节点的范围应该是(-INF,5),所以先序遍历,我们要先比较根......
  • 关于scss手动遍历生成类名
    1、自动生成宽度类名$width-name:300,100;@each$namein$width-name{.w#{$name}{width:$name+px;}};//以上代码将会生成.w300{width:300px;};.w100{width:100px;}2、自动生成间距类名$margin-name:(mt:(16,24,10),mb:(16),ml:......
  • 你还在用for循环遍历list吗?
    简介Java8API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java 集合运算​和表达的高阶抽象。这种风格将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节......
  • 二叉树的广度优先遍历(力扣102)
    文章目录题目前知BFS是什么?队列的基本操作有什么?题解一、思路二、解题方法三、Code总结题目Problem:102.二叉树的层序遍历给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。前知BFS是什么?树的广度优先遍历(BFS)是一种遍......
  • Leecode 二叉树的前序遍历
    Day2刷题我的思路:用数组list存储遍历结果,利用ArrayList的方法实现嵌套!importjava.util.*;classSolution{//defininganarraylistpublicList<Integer>preorderTraversal(TreeNoderoot){List<Integer>Traversal=newArrayList<>();......
  • 搜索与图论(一)树的遍历/深度/广度/拓扑排序
    文章目录搜索与图论树与图的深度优先遍历举个栗子树的重心思路结论代码如下树与图的广度优先遍历举个例子图中点的层次样例展示代码拓扑排序啥是拓扑排序?解题思路举个栗子题目代码如下搜索与图论树与图的深度优先遍历举个栗子树的重心思路邻接表存储......
  • 数据结构笔记(十四)二叉树的遍历(递归)
    四种访问方式:前序遍历,中序遍历,后序遍历,层序遍历这篇文章主要为前序,中序,后序遍历的递归形式,递归形式较为简单,后面更新遍历的循环形式较为复杂,建议使用递归形式#include<stdio.h>#include<stdlib.h>typedefcharE;typedefstructTreeNode*Node;structTreeNod......
  • 二叉树的迭代遍历
    二叉树前后序遍历(迭代)#include<bits/stdc++.h>usingnamespacestd;structNode{intdata;Node*left;Node*right;Node(intvalue=0):data(value),left(nullptr),right(nullptr){}};Node*insertEle();voidpreorder(Node*pNode);voidmid......
  • 【leetcode】二叉树的前序遍历➕中序遍历➕后序遍历
    大家好,我是苏貝,本篇博客带大家刷题,如果你觉得我写的还不错的话,可以给我一个赞......
  • 二叉树的垂序遍历
    说在前面......