思路:
DFS。类似八皇后问题。
#include <iostream>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <algorithm>
#include <fstream>
#include <cmath>
#include <cstring>
#include <limits.h>
#define Long long long
#define uint unsigned int
#define N
#define mod 1000000007
#define inf 100000000
#define eps 1e-10
#define For(i,l,r) for(int i=l;i<=r;i++)
#define Dor(i,r,l) for(int i=r;i>=l;i--)
using namespace std;
//_________________________________________________________________________________
char data[8][8];
int n,k;
int C;
bool col[8];
void dfs(int row, int count) {
if(count == k) {
C++;
return;
}
if(row >= n) return;
for(int i = 0; i < n; ++i) {
if(!col[i] && data[row][i] == '#') {
col[i] = true;
dfs(row+1, count+1);
col[i] = false;
}
}
dfs(row+1, count);
}
int main(int argc, const char * argv[]) {
while(cin>>n>>k) {
if(n == -1 && k == -1) return 0;
memset(data, '\0', sizeof(data));
memset(col, false, sizeof(col));
C = 0;
for(int i = 0; i < n; ++i) {
for(int j = 0; j < n; ++j) {
cin>>data[i][j];
}
}
dfs(0, 0);
cout<<C<<endl;
}
return 0;
}