zoukankan      html  css  js  c++  java
  • P1443 马的遍历

    P1443 马的遍历

    题目描述

    有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步

    输入输出格式

    输入格式:

    一行四个数据,棋盘的大小和马的坐标

    输出格式:

    一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1)

    输入输出样例

    输入样例#1:
    3 3 1 1
    
    输出样例#1:
    0    3    2    
    3    -1   1    
    2    1    4    
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<queue>
    
    using namespace std;
    const int N=401;
    const int xd[]={-1,-2,-2,-1,1,2,2,1};
    const int yd[]={-2,-1,1,2,2,1,-1,-2};
    
    struct node{
        int x,y,step;
    }now,top,nxt;
    queue<node>q;
    int ans[N][N];
    int n,m,startx,starty;
    
    inline int read()
    {
        int x=0;char c=getchar();
        while(c<'0'||c>'9')c=getchar();
        while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
        return x;
    }
    
    inline void bfs(int x,int y)
    {
        ans[x][y]=-3;
        now.x=x;
        now.y=y;
        now.step=0;
        q.push(now);
        while(!q.empty())
        {
            top=q.front();
            q.pop();
            for(int i=0;i<8;i++)
            {
                int x=top.x+xd[i];
                int y=top.y+yd[i];
                if(x>0&&x<=n&&y>0&&y<=m&&!ans[x][y])
                {
                    ans[x][y]=top.step+1;
                    nxt.x=x;
                    nxt.y=y;
                    nxt.step=top.step+1;
                    q.push(nxt);
                }
            }
        }
    }
    
    int main()
    {
        n=read();
        m=read();
        startx=read();
        starty=read();
        bfs(startx,starty);
        
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                if(ans[i][j]==-3)
                    printf("%-5d",0);
                else if(ans[i][j]==0)
                    printf("%-5d",-1);
                else printf("%-5d",ans[i][j]);
            }
            printf("
    ");
        }    
    
        return 0;
    }


  • 相关阅读:
    ZCMU 暑期练习赛【识别】
    P1024 一元三次方程求解
    P1059 明明的随机数
    P2670 扫雷游戏
    ESP32手动搭建Arduino环境
    基于arduino的气象站
    序列归并
    结构体数组排序:1004 成绩排名 【pta】
    C语言:大数求和
    centos7 安装mongodb replica set 集群搭建
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/7086877.html
Copyright © 2011-2022 走看看