zoukankan      html  css  js  c++  java
  • 马的遍历

    题目描述

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


  • 相关阅读:
    7.1类模板
    异质链表
    8.1多态性
    8.2虚函数
    error: C2664: “zajiao::zajiao(const zajiao &)”: 无法将参数 1 从“const char [12]”转换为“char *”
    #include <QPushButton>
    6.3多重继承
    华为集群后killsql命令和查看mr占用的磁盘空间
    linux的逻辑运算符
    test命令
  • 原文地址:https://www.cnblogs.com/ztz11/p/9190007.html
Copyright © 2011-2022 走看看