类似于八皇后问题,DFS入门题
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int n, k;
char str[10][10];
int a[10][10], cnt, vis[10];
void DFS(int cur,int num)
{
for (int i = 0; i != n; ++i)
if (a[cur][i] && !vis[i])
{
vis[i] = 1;
if (num == k-1) cnt++;
for (int j = cur+1; j < n; ++j)
DFS(j,num+1);
vis[i] = 0;
}
}
int main()
{
while (cin >> n >> k && n != -1)
{
for (int i = 0; i != n; ++i)
scanf("%s",str[i]);
for (int i = 0; i != n; ++i)
for (int j = 0; j != n; ++j)
if (str[i][j] == '#')
a[i][j] = 1;
else
a[i][j] = 0;
cnt = 0;
for (int i = 0; i != n; ++i)
{
memset(vis,0,sizeof(vis));
DFS(i,0);
}
cout << cnt << endl;
}
return 0;
}