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;
    	}
    }


  • 相关阅读:
    UVA 11925 Generating Permutations 生成排列 (序列)
    UVA 1611 Crane 起重机 (子问题)
    UVA 11572 Unique snowflakes (滑窗)
    UVA 177 PaperFolding 折纸痕 (分形,递归)
    UVA 11491 Erasing and Winning 奖品的价值 (贪心)
    UVA1610 PartyGame 聚会游戏(细节题)
    UVA 1149 Bin Packing 装箱(贪心)
    topcpder SRM 664 div2 A,B,C BearCheats , BearPlays equalPiles , BearSorts (映射)
    UVA 1442 Cave 洞穴 (贪心+扫描)
    UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)
  • 原文地址:https://www.cnblogs.com/ztz11/p/9190007.html
Copyright © 2011-2022 走看看