ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

马的遍历

2022-08-24 22:00:11  阅读:44  来源: 互联网

标签:遍历 int yy xx sx push 500


题目描述

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

输入

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

输出

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

样例输入
3 3 1 1
样例输出
0    3    2    
3    -1   1    
2    1    4
提示

enter image description here


bfs板子题 

 


#include<bits/stdc++.h>

using namespace std;

queue <int> x;
queue <int> y;
queue <int> s;

int dx[9]={0,-1,-2,-2,-1,1,2,2,1};
int dy[9]={0,-2,-1,1,2,2,1,-1,-2};
int mp[500][500],vis[500][500],m,n,sx,sy;

int main()
{
    cin>>m>>n>>sx>>sy;
    
    x.push(sx);//记录x坐标
    y.push(sy);//记录y坐标
    s.push(0);//记录所用步数
    
    while(!x.empty())
    {
        int tx=x.front();
        int ty=y.front();
        int ts=s.front();
        x.pop();
        y.pop();
        s.pop();
        for(int i=1;i<=8;++i)
        {
            int xx=tx+dx[i];
            int yy=ty+dy[i];
            if(xx>0&&yy>0&&xx<=m&&yy<=n&&vis[xx][yy]==0&&mp[xx][yy]==0)
       //对⑧个方向遍历 如果第一次到达就记录下步数 { x.push(xx); y.push(yy); s.push(ts+1);
         //储存新标记的的点 vis[xx][yy]=1; mp[xx][yy]=ts+1; } } } mp[sx][sy]=0; for(int i=1;i<=m;++i) { for(int j=1;j<=n;++j) { if(vis[i][j]==1) { printf("%-5d",mp[i][j]);
          //注意输出格式 } else { printf("%-5d",-1); } } cout<<endl; } return 0; }

 

标签:遍历,int,yy,xx,sx,push,500
来源: https://www.cnblogs.com/XdzxBo/p/16622432.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有