首页 > 编程知识 正文

洛谷 P1443 马的遍历,洛谷马的遍历

时间:2023-05-05 05:45:59 阅读:243567 作者:2830

题目描述

有一个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("n");29 }30 return 0;31 } View Code

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

转载于:https://www.cnblogs.com/J-william/p/6044920.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。