zoukankan      html  css  js  c++  java
  • 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<bits/stdc++.h>
    using namespace std;
    struct pos
    {
        int x;
        int y;
    };
    int mark[405][405],dx[]= {2,2,1,-1,-2,-2,-1,1},dy[]= {1,-1,-2,-2,-1,1,2,2},n,m;
    queue<pos>q;
    void bfs(int sx,int sy)
    {
        int tx,ty;
        int x,y;
        q.push(pos{sx,sy});
        mark[sx][sy]=0;
        while(!q.empty())
        {
            x=q.front().x;
            y=q.front().y;
            q.pop();
            for(int i=0; i<8; i++)
            {
                tx=x+dx[i];
                ty=y+dy[i];
                if(tx<1||ty<1||tx>n||ty>m||mark[tx][ty]+1)continue;
                q.push(pos{tx,ty});
                mark[tx][ty]=mark[x][y]+1;
            }
        }
    }
    int main()
    {
        int a,b;
        memset(mark,-1,sizeof(mark));
        cin>>n>>m>>a>>b;
        bfs(a,b);
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                printf("%-5d",mark[i][j]);
            }
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    11 对象的构造
    10 问题分析一
    9 新型的类型转换
    8 C++ 中的新成员
    7 函数重载
    6 函数参数的扩展
    5 内联函数
    查找算法总结Java实现
    九大排序算法Java实现
    帝国cms所有一级栏目遍历,如果有子栏目的话,遍历出来
  • 原文地址:https://www.cnblogs.com/sphreez/p/8610929.html
Copyright © 2011-2022 走看看