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

洛谷: P1443 马的遍历

原题地址:P1443 马的遍历 - 洛谷

题目描述

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

输入格式

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

输出格式

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

        该题可以用bfs广度优先搜索遍历来解决,因为广度优先遍历可以保证第一次访问某一个节点时得到的结果就是最短路径,完美的符合该题的题意。可以用stl类中的queue容器。即动态扩容的队列,可以有效地避免数组开的过大或过小,而发生错误。并且不能用延迟标记的方法,要立即标记当前的状态。我第一次就是用的延迟标记的方法,但是最后会超出队列的内存限制,再请教了deepseek之后,才了解到了延迟标记和立即标记的具体区别.

这也让我长见识了 。

具体代码如下:

#include <iostream>
#include <queue>
using namespace std;

//每个结构体包含当前点的坐标以及到达该店所需要的步数
struct node{
    int a,b,step;
};

int row,col;
int grid[405][405];
//马走日的八个方向
int dict[8][2] = {{2,1},{2,-1},{1,-2},{-1,-2},{-2,-1},{-2,1},{-1,2},{1,2}};

void bfs(int x,int y){
    //queue可以动态的分配内存,否则的话容易栈溢出
    queue<node> q;
    q.push({x,y,0});
    grid[x][y] = 0;
    while (!q.empty()){
        node qq = q.front();
        q.pop();
        int xx = qq.a;
        int yy = qq.b;
        int s = qq.step;
        for (int i = 0;i < 8;++i){
            int ix = xx + dict[i][0];
            int iy = yy + dict[i][1];
            if (ix >= 1 && ix <= row && iy >= 1 && iy <= col && grid[ix][iy] == -1)
            {
                //立刻标记状态,如果使用延迟标记的话会进行重复入队的操作,会超出内存限制
                grid[ix][iy] = s + 1;
                q.push({ix,iy,s + 1});
            }
        }
    }
}
int main()
{
    int x,y;
    cin>>row>>col>>x>>y;
    for (int i = 1;i <= row;++i){
        for (int j = 1;j <= col;++j){
            grid[i][j] = -1;
        }
    }
    bfs(x,y);
    for (int i = 1;i <= row;++i){
        for (int j = 1;j <= col;++j){
            printf("%-3d  ",grid[i][j]);
        }
        cout<<endl;
    }
    return 0;
}

相关文章:

  • OpenHarmony 入门——ArkUI 跨页面数据同步和应用全局单例的UI状态存储AppStorage 小结(三)
  • QML控件 - Slider
  • python脚本处理excel文件
  • 如何选择?Postman vs JMeter 对比介绍
  • zynq7020 最小ps环境速通
  • 开源大模型使用总结
  • Unity选择框(魔兽争霸3)
  • 文生图语义识别插件使用(controlnet)
  • STM32F103_LL库+寄存器学习笔记01 - 梳理CubeMX生成的LL库最小的裸机系统框架
  • immortalwrt一键istoreOS风格化
  • Unity射击游戏手榴弹笔记
  • 广告推荐算法 - 学习笔记
  • AL11和SM69 文件服务器中创建文件夹
  • 二叉树练习
  • 垃圾短信分类
  • 深度学习篇---卷积网络结构
  • 23种设计模式-创建型模式-单例
  • WPF 与 C# 开发深度剖析
  • 如何避免权限分配不合理导致的信息安全风险?
  • 【天梯赛】L2-012(实战反思代码实现)
  • 我使馆就中国公民和企业遭不公正待遇向菲方持续提出严正交涉
  • 专家:家长要以身作则,孩子是模仿者学习者有时也是评判者
  • 证监会发布《上市公司募集资金监管规则》,6月15日起施行
  • 上海锦江乐园摩天轮正在拆除中,预计5月底6月初拆完
  • 广东早熟荔枝“抢滩”上海,向长三角消费者喊话:包甜,管够
  • 受贿3501万余元,中石油原董事长王宜林一审被判13年