AcWing 1114. 棋盘问题
原题链接
简单
作者:
meimon
,
2024-04-04 18:32:38
,
所有人可见
,
阅读 1
C++ 代码
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 10;
int n, k;
char g[N][N];
bool stx[N];
int res = 0;
int num = 0;
void dfs(int y) {
if(n - y + 1 < k - num) return ;
if(num == k){
res++;
return ;
}
if(y > n) return ;
for(int i = 1; i <= n; i++){
if(g[y][i] == '#' && !stx[i]){
stx[i] = true;
num++;
dfs(y+1);
stx[i] = false;
num--;
}
}
dfs(y+1);
}
int main() {
while (n != -1 && k != -1) {
cin >> n >> k;
if (n == -1 && k == -1) break;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> g[i][j];
}
}
dfs(1);
num = 0;
cout << res << endl;
res = 0;
}
return 0;
}