一个比较简单的DFS题,搜索下就可以了。注意其中的细节问题。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#define MAX 9
using namespace std;
char map[MAX][MAX];
int ans,n,k,count;
bool vis[MAX];
void DFS(int index)
{
if(index>=n)
return;
for(int i=0;i<n;i++)
{
if(map[index][i]=='#'&&!vis[i])
{
vis[i]=1;
count++;
if(count==k)
ans++;
else
DFS(index+1);
count--;
vis[i]=0;
}
}
DFS(index+1);
}
int main()
{
while(scanf("%d%d",&n,&k)&&n!=-1)
{
ans=0;
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
scanf("%s",&map[i]);
DFS(0);
printf("%d\n",ans);
}
return 0;
}