POJ 1321
#include<bits/stdc++.h>
using namespace std;
int n,k,ans=0;
char md[10][10];
bool vis[10];//标记数组,记录列是否用过
void dfs(int row,int num)
{
if(num==k)
{
ans++;
return ;
}
if(row>n) return ;
for(int j=1;j<=n;j++)
{
if(md[row][j]=='#'&&!vis[j])
{
vis[j]=true;
dfs(row+1,num+1);
vis[j]=false;
}
}
dfs(row+1,num);//k<=n
}
int main()
{
ios::sync_with_stdio(false);
while(cin>>n>>k&&n!=-1&&k!=-1)
{
ans=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cin>>md[i][j];
}
dfs(1,0);
cout<<ans<<endl;
}
return 0;
}