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

    https://www.luogu.org/problem/show?pid=1443#sub

    题目描述

    有一个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    

     1 #include <algorithm>
     2 #include <cstring>
     3 #include <cstdio>
     4 #include <queue>
     5 
     6 using namespace std;
     7 
     8 const int N(405);
     9 int n,m,x,y;
    10 
    11 struct Node
    12 {
    13     int x,y;
    14 }node;
    15 int cnt[N][N],vis[N][N];
    16 int fx[8]={1,1,2,2,-1,-1,-2,-2};
    17 int fy[8]={2,-2,1,-1,2,-2,1,-1};
    18 queue<Node>que;
    19 void BFS(Node s)
    20 {
    21     que.push(s); cnt[s.x][s.y]=0;
    22     for(;!que.empty();)
    23     {
    24         Node a,fro=que.front();que.pop();
    25         for(int i=0;i<8;i++)
    26         {
    27             int xx=fro.x+fx[i],yy=fro.y+fy[i];
    28             if(cnt[xx][yy]!=-1||xx<1||yy<1||xx>n||yy>m) continue;
    29             cnt[xx][yy]=cnt[fro.x][fro.y]+1;
    30             a.x=xx,a.y=yy; que.push(a);
    31         }
    32     }
    33 }
    34 
    35 int main()
    36 {
    37     scanf("%d%d%d%d",&n,&m,&node.x,&node.y);
    38     memset(cnt,-1,sizeof(cnt));
    39     BFS(node);
    40     for(int i=1;i<=n;i++)
    41     {
    42         for(int j=1;j<=m;j++)
    43             printf("%-5d",cnt[i][j]);
    44         printf("
    ");
    45     }
    46     return 0;
    47 }
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    oracle常用命令(比较常见好用)
    vim编辑器详解
    对话框和打印控件
    winform弹出唯一的窗体
    ListView
    菜单栏和布局
    窗体属性和公共控件
    ASPCMS和WPF
    MVC
    正则表达式
  • 原文地址:https://www.cnblogs.com/Shy-key/p/7140503.html
Copyright © 2011-2022 走看看