题目:A - 棋盘问题
题目描述:
n皇后
的简化版
思路:
找到限制条件
之后,简单dfs
,详细思路见代码即可
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 20;
char mp[N][N];
int st[N];
int n, k, res;
void dfs(int x, int step)
{
if(step == k)
{
res ++;
return ;
}
if(x == n) return ;
// 当前行在那一列放棋子
for(int i = 0; i < n; i ++)
{
if(!st[i] && mp[x][i] == '#')
{
st[i] = 1;
dfs(x + 1, step + 1); // 放过之后就换下一行, 棋子数加1
st[i] = 0;
}
}
dfs(x + 1, step); // 当前行不放棋子
}
int main()
{
while(cin >> n >> k)
{
if(n == -1 && k == -1) break;
res = 0;
memset(st, 0, sizeof st);
for(int i = 0; i < n; i ++)
cin >> mp[i];
dfs(0, 0);
cout << res << endl;
}
return 0;
}