依然是dfs题目
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int n,k,num;
char map[10][10];
int can[10][10];
int mark[10];
void dfs(int t,int m)
{
int i;
if(t>k)
{
num++;
return;
}
if(m>=n)
{
return;
}
for(i=0;i<n;i++)
{
if(!mark[i]&&can[m][i])
{
mark[i]=1;
dfs(t+1,m+1);
mark[i]=0;
}
}
dfs(t,m+1);
}
int main()
{
int i,j;
while(scanf("%d%d",&n,&k)&&(n!=-1||k!=-1))
{
num=0;
memset(map,0,sizeof(map));
memset(can,0,sizeof(can));
memset(mark,0,sizeof(mark));
for(i=0;i<n;i++)
{
scanf("%s",map[i]);
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(map[i][j]=='#')
{
can[i][j]=1;
}
}
}
dfs(1,0);
printf("%d\n",num);
}
return 0;
}