这个题和8皇后有点像,用vis数组来记录当前列是否能放
题目链接:点击打开链接
AC代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=1000;
int n,k;
int vis[N];
int res;
char mp[N][N];
#define MM(x,y) memset(x,y,sizeof(x))
void dfs(int row,int num)
{
if(num==k)
{
res++;
return ;
}
else
{
for(int i=row+1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(mp[i][j]=='#'&&!vis[j])
{
vis[j]=1;
dfs(i,num+1);
vis[j]=0;
}
}
}
}
}
int main()
{
int i,j;
while(cin>>n>>k)
{
MM(vis,0);
MM(mp,0);
res=0;
if(n==-1&&k==-1)
break;
for(i=1;i<=n;i++)
cin>>mp[i]+1;
dfs(0,0);
cout<<res<<endl;
}
return 0;
}