马的遍历

来源:互联网 发布:证券期货软件开发许可 编辑:程序博客网 时间:2024/06/05 05:33

题目描述

有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步

输入输出格式

输入格式:

一行四个数据,棋盘的大小和马的坐标

输出格式:

一个n*m的矩阵,代表马到达某个点最少要走几步(左对齐,宽5格,不能到达则输出-1)

#include<iostream>#include<cstdio>using namespace std;struct wz{int x,y,z,bnt;}dl[160005];int ltt[405][405];int a,b,c,d,i,j,k,l,m,n,tzz;int main(){cin>>a>>b>>c>>d;dl[1].x=c;dl[1].y=d;ltt[c][d]=-1;tzz=1;for(i=1;i<=tzz;i++){if(dl[i].x+2<=a&&dl[i].y+1<=b){if(ltt[dl[i].x+2][dl[i].y+1]==0){tzz++;dl[tzz].bnt=dl[i].bnt+1;ltt[dl[i].x+2][dl[i].y+1]=dl[tzz].bnt;dl[tzz].x=dl[i].x+2;dl[tzz].y=dl[i].y+1;}}if(dl[i].x+1<=a&&dl[i].y+2<=b){if(ltt[dl[i].x+1][dl[i].y+2]==0){tzz++;dl[tzz].bnt=dl[i].bnt+1;ltt[dl[i].x+1][dl[i].y+2]=dl[tzz].bnt;dl[tzz].x=dl[i].x+1;dl[tzz].y=dl[i].y+2;}}if(dl[i].x-2>0&&dl[i].y-1>0){if(ltt[dl[i].x-2][dl[i].y-1]==0){tzz++;dl[tzz].bnt=dl[i].bnt+1;ltt[dl[i].x-2][dl[i].y-1]=dl[tzz].bnt;dl[tzz].x=dl[i].x-2;dl[tzz].y=dl[i].y-1;}}if(dl[i].x-1>0&&dl[i].y-2>0){if(ltt[dl[i].x-1][dl[i].y-2]==0){tzz++;dl[tzz].bnt=dl[i].bnt+1;ltt[dl[i].x-1][dl[i].y-2]=dl[tzz].bnt;dl[tzz].x=dl[i].x-1;dl[tzz].y=dl[i].y-2;}}if(dl[i].x-1>0&&dl[i].y+2<=b){if(ltt[dl[i].x-1][dl[i].y+2]==0){tzz++;dl[tzz].bnt=dl[i].bnt+1;ltt[dl[i].x-1][dl[i].y+2]=dl[tzz].bnt;dl[tzz].x=dl[i].x-1;dl[tzz].y=dl[i].y+2;}}if(dl[i].x-2>0&&dl[i].y+1<=b){if(ltt[dl[i].x-2][dl[i].y+1]==0){tzz++;dl[tzz].bnt=dl[i].bnt+1;ltt[dl[i].x-2][dl[i].y+1]=dl[tzz].bnt;dl[tzz].x=dl[i].x-2;dl[tzz].y=dl[i].y+1;}}if(dl[i].x+1<=a&&dl[i].y-2>0){if(ltt[dl[i].x+1][dl[i].y-2]==0){tzz++;dl[tzz].bnt=dl[i].bnt+1;ltt[dl[i].x+1][dl[i].y-2]=dl[tzz].bnt;dl[tzz].x=dl[i].x+1;dl[tzz].y=dl[i].y-2;}}if(dl[i].x+2<=a&&dl[i].y-1>0){if(ltt[dl[i].x+2][dl[i].y-1]==0){tzz++;dl[tzz].bnt=dl[i].bnt+1;ltt[dl[i].x+2][dl[i].y-1]=dl[tzz].bnt;dl[tzz].x=dl[i].x+2;dl[tzz].y=dl[i].y-1;}}}for(m=1;m<=a;m++){for(n=1;n<=b;n++){if(m==c&&n==d){ltt[m][n]=0;printf("%-5d",ltt[m][n]);continue;}if(ltt[m][n]==0){ltt[m][n]=-1;printf("%-5d",ltt[m][n]);continue;}printf("%-5d",ltt[m][n]);}cout<<endl;}}


原创粉丝点击