这题让我想到了八皇后问题,两者有区别,不过差不多的解法。
代码如下
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char mat[12][12];
int vis[12];
int cnt,n;
void dfs(int r,int k)
{
int i;
if(k==0)
{
cnt++;
return;
}
if(r >= n)
return ;
for(i=0;i<n;i++)
{
if(!vis[i]&&mat[r][i]=='#')
{
vis[i]=1;
dfs(r+1,k-1);
vis[i]=0;
}
}
dfs(r+1,k);
}
void main()
{
int k,i,j;
while(scanf("%d%d",&n,&k)!=EOF)
{
if(n==-1&&k==-1)
break;
cnt = 0;
memset(vis,0,sizeof(vis));
for(i=0;i<n;i++)
{
getchar();
for(j=0;j<n;j++)
scanf("%c",&mat[i][j]);
}
dfs(0,k);
printf("%d\n",cnt);
}
}