666

林扬泉  •  3个月前


#include<bits/stdc++.h>
using namespace std;
const int N=10;
char a[N][N];
int res;
int n=1;
void dfs(int cur,int cnt){
	if(cur==n*n){
		res=max(res,cnt);
		return;
	}
	int tx=cur/n,ty=cur%n;
	dfs(cur+1,cnt);
	if(a[tx][ty]=='.'){
		bool flag=true;
		for(int i=tx;i<n;i++){
			if(a[i][ty]=='X'){
				break;
			}
			if(a[i][ty]=='F'){
				flag=false;
			}
		}
		for(int i=tx;i>=0;i--){
			if(a[i][ty]=='X'){
				break;
			}
			if(a[i][ty]=='F'){
				flag=false;
			}
		}
		for(int i=ty;i<n;i++){
			if(a[tx][i]=='X'){
				break;
			}
			if(a[tx][i]=='F'){
				flag=false;
			}
		}
		for(int i=ty;i>=0;i--){
			if(a[tx][i]=='X'){
				break;
			}
			if(a[tx][i]=='F'){
				flag=false;
			}
		}
		if(flag){
			a[tx][ty]='F';
			dfs(cur+1,cnt+1);
			a[tx][ty]='.';
		}
	}
}
int main(){
	while(1){
		scanf("%d",&n);
		if(n==0){
			break;
		}
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				cin>>a[i][j];
			}
		}
		dfs(0,0);
		printf("%d\n",res);
		res=0;
	}
	return 0;
}

评论: