60,#2#8#9#10TLE
查看原帖
60,#2#8#9#10TLE
1126325
Indestructible楼主2024/1/24 19:24

太慢了,自测 N=14N = 14 花费 1616 秒

#include<bits/stdc++.h>
using namespace std;
const int SIZE=150;
int n,ans[SIZE],counted;
bool s[SIZE][SIZE];
char k[SIZE][SIZE];
bool check(int x,int y){
	if (k[x-1][y-1]=='.') return 0;
	for (int i=1;i<=n;i++)
		if (s[i][y]) return 0;
	for (int i=max(1-x,1-y);i<=max(n-x,n-y);i++)
		if (i && s[x+i][y+i]) return 0;
	for (int i=1,j=x+y-1;j;i++,j--)
		if (i!=x && s[i][j]) return 0;
	return 1;
}
void dfs(int t){
	if (t>=n){
		counted++;
		return;
	}
	t++;
	for (int i=1;i<=n;i++){
		if (check(t,i)){
			ans[t]=i,s[t][i]=1;
			dfs(t);
			ans[t]=0,s[t][i]=0;
		}
	}
}
int main(){
	scanf("%d",&n);
	for (int i=0;i<n;i++) scanf("%s",k[i]);
	dfs(0);
	printf("%d",counted);
	return 0;
}
2024/1/24 19:24
加载中...