洛谷P1443 马的遍历

简单的bfs

题目链接

P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目描述

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

输入格式

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

输出格式

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

题解

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int mapp[500][500];
int i,j,m,n;

struct Node
{
    int x,y,now;
}node;
queue<Node > ssr;
bool boom(int x1,int y1)
{
    if(x1<=0||y1<=0||x1>n||y1>m||mapp[x1][y1]!=-1)
    {
        return false;
    }
    return true;
}
int bfs()
{
    Node a1;
    if(!ssr.empty())
    {
        a1=ssr.front();
        ssr.pop();
    }
    else
    {
        return 0;
    }
    Node node0;
    if(boom(a1.x+1,a1.y+2))
    {
        node0.x=a1.x+1;
        node0.y=a1.y+2;
        node0.now=a1.now+1;
        mapp[node0.x][node0.y]=node0.now;
        ssr.push(node0);
    }
    if(boom(a1.x-1,a1.y+2))
    {
        node0.x=a1.x-1;
        node0.y=a1.y+2;
        node0.now=a1.now+1;
        mapp[node0.x][node0.y]=node0.now;
        ssr.push(node0);
    }
    if(boom(a1.x+1,a1.y-2))
    {
        node0.x=a1.x+1;
        node0.y=a1.y-2;
        node0.now=a1.now+1;
        mapp[node0.x][node0.y]=node0.now;
        ssr.push(node0);
    }
    if(boom(a1.x-1,a1.y-2))
    {
        node0.x=a1.x-1;
        node0.y=a1.y-2;
        node0.now=a1.now+1;
        mapp[node0.x][node0.y]=node0.now;
        ssr.push(node0);
    }

    if(boom(a1.x-2,a1.y-1))
    {
        node0.x=a1.x-2;
        node0.y=a1.y-1;
        node0.now=a1.now+1;
        mapp[node0.x][node0.y]=node0.now;
        ssr.push(node0);
    }
    if(boom(a1.x-2,a1.y+1))
    {
        node0.x=a1.x-2;
        node0.y=a1.y+1;
        node0.now=a1.now+1;
        mapp[node0.x][node0.y]=node0.now;
        ssr.push(node0);
    }
    if(boom(a1.x+2,a1.y+1))
    {
        node0.x=a1.x+2;
        node0.y=a1.y+1;
        node0.now=a1.now+1;
        mapp[node0.x][node0.y]=node0.now;
        ssr.push(node0);
    }
    if(boom(a1.x+2,a1.y-1))
    {
        node0.x=a1.x+2;
        node0.y=a1.y-1;
        node0.now=a1.now+1;
        mapp[node0.x][node0.y]=node0.now;
        ssr.push(node0);
    }
    return 1;
}
int main()
{
    memset(mapp,-1,sizeof(mapp));
    cin>>n>>m>>i>>j;
    mapp[i][j]=0;
    node.x=i;
    node.y=j;
    node.now=0;
    ssr.push(node);
    while(bfs())
    {
    }
    for(int i1=1;i1<=n;i1++)
    {
        int key=0;
        for(int j1=1;j1<=m;j1++)
        {
            cout<<mapp[i1][j1]<<" ";
        }
        cout<<endl;
    }
    return 0;
}
相关推荐
半个番茄2 小时前
C 或 C++ 中用于表示常量的后缀:1ULL
c语言·开发语言·c++
玉带湖水位记录员2 小时前
状态模式——C++实现
开发语言·c++·状态模式
查理零世3 小时前
【算法】数论基础——约数个数定理、约数和定理 python
python·算法·数论
汉克老师4 小时前
GESP2024年3月认证C++六级( 第三部分编程题(1)游戏)
c++·学习·算法·游戏·动态规划·gesp6级
闻缺陷则喜何志丹4 小时前
【C++图论】2685. 统计完全连通分量的数量|1769
c++·算法·力扣·图论·数量·完全·连通分量
利刃大大4 小时前
【二叉树深搜】二叉搜索树中第K小的元素 && 二叉树的所有路径
c++·算法·二叉树·深度优先·dfs
CaptainDrake4 小时前
力扣 Hot 100 题解 (js版)更新ing
javascript·算法·leetcode
一缕叶5 小时前
洛谷P9420 [蓝桥杯 2023 国 B] 子 2023 / 双子数
算法·蓝桥杯
甜甜向上呀5 小时前
【数据结构】空间复杂度
数据结构·算法
Great Bruce Young5 小时前
GPS信号生成:C/A码序列生成【MATLAB实现】
算法·matlab·自动驾驶·信息与通信·信号处理