蓝桥杯 第十天 2019国赛第4题 矩阵计数
最后一个用例超时了,还是记录一下
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();//2
m = scan.nextInt();//3
visited = 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个都是x
if(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个都是x
if(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;//回溯
}
}
}
把这个想象成一个二维数组就行,不用像走迷宫那样搞,会大大增运行时间