首页 > 其他分享 >P1443 马的遍历

P1443 马的遍历

时间:2024-01-16 17:44:07浏览次数:25  
标签:遍历 const P1443 vis int bfs leq ans

马的遍历

题目描述

有一个 \(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进行解决(当然bfs也是最短路的问题一种解决方案)

```plaintext
#include<bits/stdc++.h>
using namespace std;

const int N=500;


const int dx[]={1,1,-1,-1,2,2,-2,-2};
const int dy[]={2,-2,2,-2,1,-1,1,-1};
int n,m,x,y;
int ans[N][N];
bool vis[N][N];
queue<pair<int,int> >q;
void bfs(int x,int y)
{
    q.push(make_pair(x,y));
    vis[x][y]=1;
    ans[x][y]=0;
    while(q.size()){
        int xx=q.front().first,yy=q.front().second;
        q.pop();
        for(int i=0;i<8;i++){
            int a=xx+dx[i],b=yy+dy[i];
            if(a<1||a>n||b<1||b>m||vis[a][b])continue;
            q.push(make_pair(a,b));
            vis[a][b]=1;
            ans[a][b]=ans[xx][yy]+1;
        }
    }
}


int main()
{
    cin>>n>>m>>x>>y;
    memset(vis,0,sizeof vis);
    memset(ans,-1,sizeof ans);
    bfs(x,y);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            printf("%-5d",ans[i][j]);
        }
        cout<<endl;
    }
    return 0;
}

标签:遍历,const,P1443,vis,int,bfs,leq,ans
From: https://www.cnblogs.com/isomer/p/17968186

相关文章

  • 非递归形式遍历二叉树
    最简单的就是前序遍历,每次将栈顶元素插入数组中。但要注意由于栈的性质,先push右节点再push左节点。点击查看代码classSolution{public:vector<int>preorderTraversal(TreeNode*root){vector<int>v;stack<TreeNode*>stk;if(root!=NULL){stk.push(root);}while(!......
  • 代码随想录 day18 找树左下角的值 路径总和 从中序与后序遍历序列构造二叉树
    找树左下角的值最简单就是想到层序遍历之后取第一个位置元素就是了递归的话需要先判断哪里最深的节点至于最左保持中左右的遍历顺序第一次得到最大深度处就是最左的路径总和有点像查找子树路径所以递归回溯是比较好的选择在求路径的适合,targetSum-node->val是否为......
  • JOSN字符串字段遍历(json-path)
    官网https://github.com/json-path/JsonPath依赖<dependency><groupId>com.jayway.jsonpath</groupId><artifactId>json-path</artifactId><version>2.5.0</version></dependency>......
  • day13 代码随想录算法训练营 递归遍历
    题目:144.二叉树的前序遍历145.二叉树的后序遍历94.二叉树的中序遍历我的感悟:用helper内部函数写更好理解难点: 代码难点:代码示例:前序#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#......
  • Java反射遍历判断值是否属于枚举类Enum
    首先,是一个枚举类:publicenumAuditState{TO_BE_AUDIT(0,"待审核"),AUDITED(1,"已审核");privateStringmessage;privateIntegercode;AuditState(Integercode,Stringmessage){this.message......
  • HashMap的七大遍历方式
    HashMap遍历HashMap的遍历总共可以分为以下四类Iterator遍历ForEach遍历Lambda表达式遍历StreamAPI遍历Iterator迭代器遍历Iterator结合entrySet遍历//Iterator结合entry遍历HashMapMap<Integer,String>hashMap=newHashMap<>();hashMap.pu......
  • VBA遍历控件,并在指定的位置赋值
    Sub遍历控件并赋值()DimwsAsWorksheetDimshpAsShapeDimctrlNameAsStringDimctrlValueAsIntegerSetws=ThisWorkbook.Worksheets(1)'表示第一个工作表'设置控件名和对应位置的数组DimcontrolArray()AsVariant......
  • 代码随想录算法训练营第十八天 | 513.找树左下角的值,112. 路径总和,113.路径总和ii,106.
    一、513.找树左下角的值题目链接:LeetCode513.找树左下角的值学习前:思路:层序遍历。采用递归和迭代两种方式递归:定义最大深度和目标值两个成员变量,方法参数是结点和当前结点的深度;返回类型为void;终止条件为结点为空;单次循环内容为判断该节点是否符合目标要求,且分别传入左子......
  • 二叉树的四种遍历-前序、中序、后序、层序
    目录一、易懂的形象理解1、先序遍历2、中序遍历3、后序遍历4、层序遍历二、真正理解三种遍历一、易懂的形象理解其实从名字就可以很好的理解这三种遍历,我在第二点时候说,但是估计能翻到我的文的同学们之前肯定看过好多类似的了,那咱们换个思路~先用我想的一种简单易懂的形象思维......
  • 二叉树遍历(C语言版)
    二叉树遍历先序递归int*res;voidpreorder(structTreeNode*root,int*returnSize){if(root==NULL)return;//根左右res[(*returnSize)++]=root->val;preorder(root->left,returnSize);preorder(root->right,returnSize);}int*pre......