题目大意:输入n,k,n表示棋盘大小为n*n,接下来n行描述棋盘,#表示棋盘区域,'.'表示空白区域,棋盘区域才能放棋子,k表示要放置的棋子个数。
#include <iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char a[9][9];
int aa[10];
int k,countt,n;
void dfs(int row,int num)
{
int i,j;
if(num==k)
{
countt++;
return;
}
for(i=row+1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(a[i][j]=='#'&&aa[j]==0){
aa[j]=1;
dfs(i,num+1);
aa[j]=0;
}
}
}
/*while(j<n){
if(a[i][j]=='.'&&aa[j]==0){
aa[j]=1;
k--;
if(k==0)
{
count++;
k++;
}
j++;
dfs(n,k,i,j);
}
if(j>n)
i++;
}
if(i>n&&j>n)
return false;
}
*/
int main()
{
char b[10];
int i,j;
while(scanf("%d%d",&n,&k)&&(n!=-1||k!=-1))
{
countt=0;
memset(aa,0,sizeof(aa));
gets(b);
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
scanf("%c",&a[i][j]);
gets(b);
}
dfs(0,0);
//for(i=0;i<n;i++)
printf("%d\n",countt);
}
//cout << "Hello world!" << endl;
return 0;
}