题意就是给一个棋盘,这个棋盘每个有不可使用的区域。
问,给你k个棋子,问你有多少种放法。
每放一个棋子,该棋子所在行,所在列都不能有其他棋子。
八皇后问题。
深搜一发,标记好,一行一行搜。
//#include <bits/stdc++.h>
#include <iostream>
#include <stdio.h>
#include <string.h>
#define LL long long
using namespace std;
const int maxn=10+5;
char mmap[maxn][maxn];
int v[maxn];
int ans,n,k;
void dfs(int x,int cnt){
if(cnt==0){
ans++; return;
}
for(int i=x;i<=n;i++)
for(int j=1;j<=n;j++)
if(mmap[i][j]=='#'&&!v[j]){
v[j]=1;
dfs(i+1,cnt-1);
v[j]=0;
}
}
int main(){
while(scanf("%d %d",&n,&k)){
if(n==-1&&k==-1) break;
memset(v,0,sizeof(v));
for(int i=1;i<=n;i++)
scanf("%s",mmap[i]+1);
ans=0;
dfs(1,k);
printf("%d\n",ans);
}
return 0;
}