代码
#include <iostream>
using namespace std;
char canvas[8][8];
bool flag[8];
int ans;
int n, k;
int cnt;
void dfs(int row){
if (cnt == k){
ans++;
return;
}
if (row >= n)
return;
for (int i = 0; i < n; i++){
if (canvas[row][i] == '#' && !flag[i]) {
flag[i] = true;
cnt++;
dfs(row + 1);
cnt--;
flag[i] = false;
}
}
dfs(row + 1);
}
int main(){
while (scanf("%d%d", &n, &k) && !(n == k && n == -1)) {
ans = cnt = 0;
memset(flag, false, sizeof(flag));
for (int i = 0; i < n; ++i) {
cin >> canvas[i];
}
dfs(0);
cout << ans << endl;
}
}
结果