Live2D

马的遍历

题目描述

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


posted @ 2017-12-04 00:04  ztz11  阅读(174)  评论(0编辑  收藏  举报