题目链接;【poj 1321】
<span style="font-size:14px;">#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
char str[10][10];
int row[10], n, col[10];
__int64 ans;
void dfs(int x, int k)
{
if(k==0)
{
ans++;
return;
}
for(int j=x; j<n; j++)
{
while(col[j]==0) j++;
for(int i=0; i<n; i++)
{
if(str[i][j]=='#'&&row[i]==0)
{
row[i]=1;
dfs(j+1, k-1);
row[i]=0;
}
}
}
}
int main()
{
int k, s;
while(~scanf("%d%d", &n, &k))
{
if(n==-1&&k==-1) break;
memset(col, 0, sizeof(col));
memset(row, 0, sizeof(row));
s=0;
for(int i=0; i<n; i++)
{
scanf("%s", str[i]);
for(int j=0; j<n; j++)
{
if(str[i][j]=='#') col[j]=1, s++;
}
}
ans=0;
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
if(str[j][i]=='#')
{
row[j]=1;
dfs(i+1, k-1);
row[j]=0;
str[j][i]='.';
s--;
if(s<k) break;
}
}
if(s<k) break;
}
printf("%I64d\n", ans);
}
return 0;
}</span>