package 块;
import java.util.Scanner;
public class 马的遍历2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner input =new Scanner(System.in);
     int i,j,k;
     int []dicoi= { -2,-2,+2,+2,-1,+1,-1,+1};
     int []dicoj= { -1,+1,-1,+1,-2,-2,+2,+2};
     int N=input.nextInt();
     int M=input.nextInt();
     int [][]NM=new int [N][M];
     int a=input.nextInt();
     int b=input.nextInt();
     int [][]Coordinate=new int [1][2];
		Coordinate[0][0]=a-1;
		Coordinate[0][1]=b-1;
		k=0;
	int [][]Passparameters=	coordinate(NM,dicoi,dicoj,Coordinate,a,b);
//	         两次循环 一次有效 一次无效
	while(Passparameters[0][0]>-1) {  
		Passparameters=coordinate(NM,dicoi,dicoj,Passparameters,a,b);

	}
	
	 for(i=0;i<NM.length;i++) {
		 for(j=0;j<NM[i].length;j++) {
			 if(NM[i][j]==0)
				 NM[i][j]=-1;
		 }
	 }
	  NM[a-1][b-1]=0;
		for(i=0;i<NM.length;i++) {
			for(j=0;j<NM[i].length;j++) {
				System.out.print(NM[i][j]+" ");
			}
			System.out.print("\n");
		}
	}
	public static int [][]coordinate(int [][]NM,int []dicoi,int []dicoj,int [][]Coordinate,int a,int b){
		int i,j,k;
		int [][]Temporary=new int [100][2];
		
		 k=0;
		for(i=0;i<Coordinate.length;i++) {
			for(j=0;j<8;j++) {
				if(Coordinate[i][0]+dicoi[j]>=0&&Coordinate[i][1]+dicoj[j]>=0) // 保证下标不为负数
					if(Coordinate[i][0]+dicoi[j]<NM.length)// 保证加过的下标为在NM数组的下标范围内 行
						if(Coordinate[i][1]+dicoj[j]<NM[Coordinate[i][0]+dicoi[j]].length) 
						if(NM[Coordinate[i][0]+dicoi[j]][Coordinate[i][1]+dicoj[j]]==0){//保证不重复行走
							NM[Coordinate[i][0]+dicoi[j]][Coordinate[i][1]+dicoj[j]]=NM[Coordinate[i][0]][ Coordinate[i][1]]+1;
				      Temporary[k][0]=Coordinate[i][0]+dicoi[j];
				      Temporary[k][1]=Coordinate[i][1]+dicoj[j];
				      ++k;
						}
			}
		}
		if(k>1) {
			int [][]fix=new int [k][2];
			for(i=0;i<fix.length;i++) {
				for(j=0;j<fix[i].length;j++) {
					fix[i][j]=Temporary[i][j];
				}
			}		
			return fix;
		}
		
		else  {
			int [][]fix1=new int [1][1];
			fix1[0][0]=-1;
			return fix1;
		}		
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值