马走日DFS深搜(Java实现)

在这里插入图片描述
代码:

package 蓝桥杯;

import java.util.Scanner;

public class VO深搜_马走日 {

	static int n,m,x,y;//n*m的棋盘,x的范围是0~n-1,y的范围是0~m-1
	static int[][] qipan=new int[10][10];//将棋盘上的点,抽象为一个数组,没走过时默认记为0,走过记为1
	static int[][] d= {{1,2},{2,1},{2,-1},{1,-2},{-1,-2},{-2,-1},{-2,1},{-1,2}}; //马走日八个方向
	static int count=1;
	static int Num;
	public static void main(String[] args) {
		Scanner reader=new Scanner(System.in);
		int N=reader.nextInt();
		while(N!=0) {
			Num=0;
			//读数据
			n=reader.nextInt();
			m=reader.nextInt();
			x=reader.nextInt();
			y=reader.nextInt();
			qipan[x][y]=1;
			DFS(x,y);
			System.out.println(Num);
			N--;
		}
		
	}
	static void DFS(int x,int y) {
		int x1,y1;
		//边界条件
		if(count==n*m) {
			Num++;
			return ;
		}
		//马走日有八个方向
		for(int i=0;i<8;i++) {
			x1=x+d[i][0];
			y1=y+d[i][1];
			if (x1>=0&&y1>=0&&x1<n&&y1<m&&qipan[x1][y1]==0) {
				qipan[x1][y1]=1;
				count++;
				DFS(x1, y1);
				count--;
				qipan[x1][y1]=0;
			}
		}
		
	}

}

Java提交结果会内存超限,但是C++就不会
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值