首页 > 其他分享 >【题解】洛谷马的遍历

【题解】洛谷马的遍历

时间:2024-04-08 20:31:01浏览次数:12  
标签:tmp 遍历 洛谷 int 题解 memset sx ans include

马的遍历

方法:广度优先搜索

源代码如下

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

struct coord{
    //结构体定义x,y坐标
    int x , y;
};

queue <coord> Q;
int ans[500][500];  // -1代表未访问
int walk[8][2] = {{2 , 1} , {1 , 2} , {-1 , 2} , {-2 , 1} , {-2 , -1} , {-1 , -2} , {1 , -2} , {2 , -1}};

int main(){
    int n , m , sx , sy;
    memset(ans , -1 , sizeof(ans));
    cin >> n >> m >> sx >> sy;
    coord tmp = {sx , sy};
    Q.push(tmp);
    ans[sx][sy] = 0;
    while(!Q.empty()){
        coord u = Q.front();
        int ux = u.x , uy = u.y;
        Q.pop();
        for(int k = 0 ; k < 8 ; k ++){
            int x = ux + walk[k][0] , y = uy + walk[k][1];
            int d = ans[ux][uy];
            if(x < 1 || x > n || y < 1 || y > m || ans[x][y] != -1)    //判断是否超出范围或被访问
                continue;
            ans[x][y] = d + 1;
            coord tmp = {x , y};
            Q.push(tmp);    //符合要求,入栈
        }
    }
    for(int i = 1 ; i <= n ; i ++ , puts("")){
        for(int j = 1 ; j <= m ; j ++){
            printf("%-5d" , ans[i][j]);
        }
    }
    return 0;
}

注意:二维数组赋值一定要用memset
memset用法:memset(函数名 , 数值 , 列表长度(可以直接用sizeof(列表名));

标签:tmp,遍历,洛谷,int,题解,memset,sx,ans,include
From: https://blog.csdn.net/Michael888888ha/article/details/137522706

相关文章

  • C++ 遍历queue
    在C++中,std::queue是一个遵循先进先出(FIFO)原则的容器。由于std::queue不提供直接访问容器内部元素的方法,因此不能直接遍历。但是,您可以使用一个临时队列来遍历。以下是如何做到这一点的示例代码: #include<iostream>#include<queue>intmain(){std::queue<i......
  • Leetcode 第 390 场周赛题解
    Leetcode第390场周赛题解Leetcode第390场周赛题解题目1:3090.每个字符最多出现两次的最长子字符串思路代码复杂度分析题目2:3091.执行操作使数据元素之和大于等于K思路代码复杂度分析题目3:3092.最高频率的ID思路代码复杂度分析题目4:3093.最长公共后缀查询思......
  • CF1361E James and the Chase 题解
    Description给定一个有\(n\)个点\(m\)条边的有向强连通图。称一个点是好的当且仅当它到其他点都有且只有一条简单路径。如果好的点至少有\(20\%\)则输出所有好的点,否则输出-1。单个测试点内有多组数据。\(1\leqT\leq2\times10^3,1\leqn\leq10^5,1\leqm\leq2\time......
  • 任务处理【华为OD机试】(JAVA&Python&C++&JS题解)
    一.题目-任务处理在某个项目中有多个任务(用tasks数组表示)需要您进行处理,其中tasks[i]=[si,ei],你可以在si<=day<=ei中的任意一天处理该任务。请返回你可以处理的最大任务数。注:一天可以完成一个任务的处理。输入描述:第一行为任务数量n,1<=n<=100000。后......
  • 跳马【华为OD机试】(JAVA&Python&C++&JS题解)
    一.题目马是象棋(包括中国象棋和国际象棋)中的棋子,走法是每步直一格再斜一格,即先横着或直着走一格,然后再斜着走一个对角线,可进可退,可越过河界,俗称“马走‘日’字。给顶m行n列的棋盘(网格图),棋盘上只有有棋子象棋中的棋子“马”,并且每个棋子有等级之分,等级为k的马可以跳1~k......
  • AT_abc348_e 的题解
    (一)感觉D>E。考虑换根DP,把节点\(1\)当作一开始的根节点。先搜一遍,把\(f(1)\)算出。当将计算的节点从父结点往子节点转移时,每个节点到计算的节点的距离要么\(-1\)要么\(+1\),取决于是否在子节点的子树内。可以提前处理字数内\(C\)的值的和,来计算\(f\)的变化量。(二)......
  • 洛谷P1020导弹拦截
    ①题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截......
  • 动态规划和层次遍历 —— [NOIP2002 普及组] 过河卒
    题目如下:[NOIP2002普及组]过河卒题目描述棋盘上AAA点有一个过河卒,需要走到目标BB......
  • CF1292B 题解
    Aroma'sSeatch题意简述题目链接。一个二维平面内有无限个点,从\(0\)开始编号,编号为\(0\)的点的坐标为\((x_{0},y_{0})\)。对于一个编号为\(i(i>0)\)的点,它的坐标为\((a_{x}\cdotx_{i-1}+b_{x},a_y\cdoty_{i-1}+b_{y})\)。Aroma最开始在点\((x_s,y_s)\)处,她每......
  • CF1744F MEX vs MED 题解
    题目传送门题目大意给定一个数列,求满足\(\operatorname{mex}(a_l\sima_r)>\operatorname{med}(a_l\sima_r)\)的区间\([l,r]\)的个数。解题思路记\(p_i\)为\(i\)出现的位置。我们可以枚举\(d\),先确定\(\operatorname{mex}(a_l\sima_r)>d\)的区间。由于数列是\(......