这个题确实有点简单,看清楚不能同列同行就好了,用一个一维数组标记哪一列用了往下搜就好了
#include<stdio.h>
int flag[8]={1,1,1,1,1,1,1,1},i,j,n,k,num=0;
char arr[10][11];
void dfs(int a,int b)
{
int ii,jj;
if(b==0)
{
num++;
return ;
}
for(ii=a+1;ii<n;ii++)
for(jj=0;jj<n;jj++)
{
if(flag[jj]&&arr[ii][jj]=='#')
{
flag[jj]=0;
b--;
dfs(ii,b);
b++;
flag[jj]=1;
}
}
}
int main()
{
char c;
while(~scanf("%d%d",&n,&k)&&(n!=-1||k!=-1))
{
scanf("%c",&c);
for(i=0;i<n;i++)
for(j=0;j<n+1;j++)
scanf("%c",&arr[i][j]);
dfs(-1,k);
printf("%d",num);
printf("\n");
num=0;
}
return 0;
}