代码:
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;
}
}
}
}