最后一个用例超时了,还是记录一下
import java.util.Scanner;public class Main {static int visited[][];static int count = 0;static int n,m;public static void main(String[]args) {Scanner scan = new Scanner(System.in);n = scan.nextInt();//2m = scan.nextInt();//3visited = new int[n+5][m+5];cc(0,0);System.out.println(count);}static void cc(int i ,int j) {if(i==n) { //行for(int ii =0;ii<n;ii++) {for(int jj = 0;jj<m;jj++) {if(m>=3&&m-jj>=3) {//是否会连续一行3个都是xif(visited[ii][jj]==1&&visited[ii][jj+1]==1&&visited[ii][jj+2]==1)return; }}}//列for(int ii =0;ii<m;ii++) { for(int jj = 0;jj<n;jj++) {if(n>=3&&n-jj>=3) {//是否会连续一列3个都是xif(visited[jj][ii]==1&&visited[jj+1][ii]==1&&visited[jj+2][ii]==1)return; }}}count++;return;}if (j+1<m) {visited[i][j] = 1;cc(i,j+1);visited[i][j] = 2;cc(i,j+1);visited[i][j] = 0;//回溯
}else {visited[i][j] = 1;cc(i+1,0);visited[i][j] = 2;cc(i+1,0);visited[i][j] = 0;//回溯
}}
}
把这个想象成一个二维数组就行,不用像走迷宫那样搞,会大大增运行时间