• 马的遍历


    题目描述

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


  • 相关阅读:
    netcore使用IdentityServer在nginx下502错误的解决
    更新到.netcore3.0后找不到dotnet-ef的解决办法
    openssh-win64 on windows2016 ssh pub key config
    405 Method Not Allowed error with PUT or DELETE Request on IIS Server
    minikube windows hyperx填坑记
    angular当router使用userhash:false时路由404问题
    内网gitlab11.2升级至11.4.5
    Angular7上手体验
    动态规划之背包问题
    Union-Find算法详解
  • 原文地址:https://www.cnblogs.com/ztz11/p/9190007.html
Copyright © 2020-2023  润新知