有东西的,很细很经典
C++:
#include <bits/stdc++.h>
using namespace std;
const int N=9;
char g[N][N];
bool st[N];//N列
int n,k,cnt=0,res=0;
void dfs(int l,int cnt){
if (cnt==k){
res++;
return;
}
if (l>=n) return;
for(int j=0;j<n;j++){
if(g[l][j]=='.') continue;
if(!st[j]){
st[j]=true;
dfs(l+1,cnt+1);
st[j]=false;
}
}
dfs(l+1,cnt);//l行不放棋子
}
int main(){
while(cin>>n>>k,n>0 && k>0){
for(int i=0;i<n;i++){
scanf("%s",g[i]);
}
res=0;
memset(st, 0, sizeof(st));
dfs(0,0);
cout<<res<<endl;
}
return 0;
}