用深搜就行了。
AC代码:
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
int n, k, cnt;
int chess[9][9], visit[9];
void dfs(int row, int num)
{
if(num == k){
cnt++;
return;
}
if(row > n) return;
for(int i =1; i<=n; i++){
if(chess[row][i] && !visit[i]){
visit[i] = 1;
dfs(row+1, num+1);
visit[i] = 0;
}
}
dfs(row+1, num);
return;
}
int main()
{
char s;
while(~scanf("%d%d", &n, &k)){
getchar();
if(n==-1 && k==-1) break;
memset(visit, 0, sizeof(visit));
memset(chess, 0, sizeof(chess));
cnt = 0;
for(int i = 1; i<=n; i++){
for(int j =1; j<=n; j++){
cin>>s;
if(s=='#')
chess[i][j] = 1;
}
}
dfs(1, 0);
printf("%d\n", cnt);
}
return 0;
}