Poj-1321 棋盘问题

Poj-1321 棋盘问题

# include<stdio.h>
# include<string.h>
# include<algorithm>
# include<iostream>
# include<queue>
# define maxn 30
using namespace std;
char s[maxn][maxn];
int vis[maxn];
int ans,n,k;
void dfs(int x,int num){
	if(num==k){
		ans++;
		return ;
	}
	if(x>=n){
		return ;
	}
	for(int i=0;i<n;i++){
		if(!vis[i]&&s[x][i]=='#'){
			vis[i]=1;
			dfs(x+1,num+1);
			vis[i]=0;
		}
	}
	dfs(x+1,num);
}




 int main(){
 	while(scanf("%d%d",&n,&k)!=EOF){
 		if(n==-1&&k==-1){
 			break;
		 }
		 memset(s,0,sizeof(s));
		 memset(vis,0,sizeof(vis));
		 for(int i=0;i<n;i++){
		 	scanf("%s",s[i]);
		 }
		 ans=0;
		 dfs(0,0);
		 printf("%d\n",ans);
	 }
	 return 0;
 }