跟八皇后差不多的搜索问题,稍微复杂一点
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<string.h>
#include<cstring>
#include<string>
#include<map>
#include<set>
#include<vector>
#include<ctime>
#define hash hashh
using namespace std;
typedef long long ll;
#define sp system("pause")
char G[10][10];
int pos[10];
int n, m;
int cur;
int ans;
void dfs(int cur,int c)
{
if (cur==0)
{
ans++;
return;
}
if (c == n)
return;
for (int i = 0; i < n; i++)
{
if (G[c][i] == '#')
{
int ok = 1;
pos[c] = i;
for (int j = 0; j < c; j++)
{
if (pos[c] == pos[j]&&pos[j]!=-1)
{
ok = 0; break;
}
}
if (ok)
{
dfs(cur-1,c+1);
pos[c] = -1;
}
pos[c] = -1;
}
}
dfs(cur, c + 1);
}
int main()
{
while (cin >> n >> m)
{
if (n == -1 && m == -1)break;
for (int i = 0; i < 10; i++)
pos[i] = -1;
ans = 0;
for (int i = 0; i < n; i++)
scanf("%s", G[i]);
dfs(m,0);
cout << ans << endl;
}
return 0;
}