题目描述
dfs搜索,和皇后问题类似。
#include<iostream>
using namespace std;
const int N = 10;
char g[N][N];
bool st[N];
int n, k;
int ans;
void dfs(int t, int u)//t表示第几行,u表示第几个
{
if(u == k) {ans++; return;}//如果满足k个,ans++
if(t == n) return;//如果t==n,说明已经超出范围,停止搜索
for(int i = 0; i <= n; i++)
{
if(g[t][i] == '#' && !st[i] && i < n)
{
st[i] = 1;
dfs(t + 1, u + 1);
st[i] = 0;
}
else if(i == n) dfs(t + 1, u);//如果i==n,说明该行已搜索完成,继续搜索下一行
}
}
int main()
{
while(true)
{
cin >> n >> k;
if(n == -1 && k == -1) break;
for(int i = 0; i < n; i++) cin >> g[i];
ans = 0;
dfs(0, 0);
cout << ans << endl;
}
return 0;
}