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<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<queue>
    #include<cstring>
    using namespace std;
    struct wjz{
    int x,y,d;
    };
    int ans[410][410];
    bool vis[410][410];
    int dx[8]={1,2,-1,-2,1,2,-1,-2};
    int dy[8]={2,1,2,1,-2,-1,-2,-1};
    queue<wjz> Q;
    wjz w;
    int main()
    {
    memset(ans,-1,sizeof(ans));
    int m,n,a,b;
    cin>>n>>m>>a>>b;
    ans[a][b]=0;
    vis[a][b]=1;
    Q.push((wjz){a,b,0});
    while(!Q.empty())
    {
    w=Q.front();
    Q.pop();
    for(int i=0;i<=7;i++)
    {
    int ax=w.x+dx[i],ay=w.y+dy[i];
    if(ax>=1&&ax<=n&&ay>=1&&ay<=m&&vis[ax][ay]==0)
    {
    Q.push((wjz){ax,ay,w.d+1});
    ans[ax][ay]=w.d+1;
    vis[ax][ay]=1;
    }
    }
    }
    for(int i=1;i<=n;i++)
    {
    for(int j=1;j<=m;j++)
    printf("%-5d",ans[i][j]);
    cout<<endl;
    }
    return 0;
    }

  • 相关阅读:
    访问虚拟机
    w3school JavaScript 简介
    蘑菇街2016研发工程师在线编程题
    乐视2017暑期实习生笔试题(二)
    今日头条2017后端工程师实习生笔试题
    c# 读取 excel文件内容,写入txt文档
    处理字符串
    XML获取节点信息值
    SVN仓库目录结构
    sql 知识点
  • 原文地址:https://www.cnblogs.com/weijianzhen/p/12896255.html
Copyright © 2011-2022 走看看