#include<bits/stdc++.h>
using namespace std;
int n,gs,geshu=0;
char a[9][9];
bool panduan(int x,int y) {
for(int i=0;i<x;i++)if(a[i][y]=='X')return false;
for(int i=0;i<y;i++)if(a[x][i]=='X')return false;
return true;}
void dfs(int k,int gss){
if(k>=n*n){
if(gss==0){
gss=gs;
geshu++;}
return;}
int x=k/n;
int y=k%n;
if(panduan(x,y)&&a[x][y]=='#'&&gss>0){
a[x][y]='X';
dfs(k+1,gss-1);
a[x][y]='#';}
dfs(k+1,gss);}
int main(){
while(cin>>n>>gs){
if(n+gs==-2)break;
geshu=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>a[i][j];
dfs(0,gs);
cout<<geshu<<endl;}
return 0;}
搜索总使我自闭 所以要好好练习
自闭就自闭 [○・`Д´・ ○]