单纯的简化版n皇后。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=10;
char Map[N][N];
bool PointX[N],PointY[N];
int n,m,ans=0;
void dfs(int x,int num)
{
if(num==m)
{
ans++;
return;
}
if(x==n+1)return;
dfs(x+1,num);
for(int i=1;i<=n;i++)
{
if(!PointX[x] && !PointY[i] && Map[x][i]!='.')
{
PointX[x]=PointY[i]=true;
dfs(x+1,num+1);
PointX[x]=PointY[i]=false;
}
}
}
int main()
{
while(cin>>n>>m)
{
if(n==-1 || m==-1)break;
ans=0;
for(int i=1;i<=n;i++)cin>>Map[i]+1;
dfs(1,0);
cout<<ans<<endl;
}
return 0;
}