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   
    代碼實現:
     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 int n,m,qh,ql,h,l,s,nh,nl,ns,head,tail;
     5 int map[600][600],dl[300000][3];
     6 int hb[]={-2,-1,1,2,2,1,-1,-2};
     7 int lb[]={1,2,2,1,-1,-2,-2,-1};
     8 bool v[600][600];
     9 int main(){
    10 scanf("%d%d%d%d",&n,&m,&qh,&ql);
    11 dl[head][1]=qh;dl[head][2]=ql;
    12 dl[head++][0]=0;v[qh][ql]=0;
    13 while(head>tail){
    14 h=dl[tail][1];l=dl[tail][2];s=dl[tail++][0];v[qh][ql]=1;
    15 for(int i=0;i<8;i++){
    16 nh=h+hb[i];nl=l+lb[i];ns=s+1;
    17 if(!v[nh][nl]&&nh>=1&&nh<=n&&nl>=1&&nl<=m){
    18 v[nh][nl]=1;
    19 dl[head][1]=nh;dl[head][2]=nl;map[nh][nl]=dl[head++][0]=ns;
    20 }
    21 }
    22 }
    23 for(int i=1;i<=n;i++){
    24 for(int j=1;j<=m;j++){
    25 if(v[i][j]) printf("%-5d",map[i][j]);
    26 else printf("%-5d",-1);
    27 }
    28 printf("
    ");
    29 }
    30 return 0;
    31 }
    View Code

    經典題目馬走日改編,好吧,很水。

  • 相关阅读:
    Java中的并发库学习总结
    Android源码的git下载地址
    Android下载Android源码
    工具类 验证手机邮箱
    hibernate缓存说明
    Hibernate之N+1问题
    常用正则
    Java Base64加密、解密原理Java代码
    Base64加密解密原理以及代码实现(VC++)
    情书经典语录
  • 原文地址:https://www.cnblogs.com/J-william/p/6044920.html
Copyright © 2011-2022 走看看