#include<stdio.h>
int book[10];
char c[10][10];
int sum , step;
int n , k ;
void dfs (int s)//s表示行 因为每行每列都不可以有元素 所以一行为单位
{
int p;
if(step== k) {
sum ++;
return;
}
else{
if(s>= n) return;
else{
for(p= 0 ; p< n ; p++){
if(c[s][p]== '#'&& !book[p]){
book[p] =1;
step ++;
dfs(s+1);
book[p] =0;
step --;
}
}
}
dfs(s+1);
}
}
int main(){
int i ;
while(scanf("%d %d",&n,&k)!= EOF)
{
if(n== -1&& k == -1)break;
getchar();
for(i= 0 ;i< 10 ; i++)
book [i] =0;
//reset
step =0 ; sum = 0 ;
for(i= 0 ; i< n ; i++ )
scanf("%s",c[i]);
//input
dfs(0);
printf("%d\n",sum);
}
}
以行为单位的DFS , 使用一层循环逐行遍历 , DFS ,