#include //POJ 1321-棋盘问题 简单搜索DFS
#include // http://acm.pku.edu.cn/JudgeOnline/problem?id=1321
char c[10][10];
int f,ans,vis[20],n,k;
void dfs(int m,int i)
{
int nn,l,ii;
//printf("dffvcfb %d %d\n",m+1,i+1);
if(vis[i]==1) return; //vis[i]为当前列数标记
f++,vis[i]=1; //f为已摆放棋子个数
if(f==k)
{
//printf("dffvcfb\n");
ans++,f--,vis[i]=0;
return;
}
for(nn=m+1;nn
{
l=strlen(c[nn]);
for(ii=0;ii
if(c[nn][ii]=='#') dfs(nn,ii);
}
f--;
vis[i]=0; // 没这个 wa了几次 ~~
return;
}
int main()
{
int m,l,i;
while(~scanf("%d%d",&n,&k)) //n为行列数,k为需摆放棋子个数
{
if(n==-1||k==-1) break;
ans=0,f=0;
memset(c,0,sizeof(c));
memset(vis,0,sizeof(vis));
getchar();
for(m=0;m
gets(c[m]); //存数据
for(m=0;m
{
l=strlen(c[m]);
for(i=0;i
if(c[m][i]=='#')
{
//printf("%d\n",m+1);
dfs(m,i);
memset(vis,0,sizeof(vis));
}
}
printf("%d\n",ans);
}
}
/*
2 1
#.
.#
4 3
#..#
..#.
.#..
#..#
4 2
...#
.##.
.#..
##.#
4 2
...#
..#.
.#..
#...
4 2
...#
.#..
.#..
#...
4 2
....
....
.#..
#...
2 2
##
##
3 2
###
.##
###
-1 -1
*/