dfs,
由于两处小小的错误,导致浪费好多时间
按行搜索,然后在把依搜索的列标记一下
#include <cstdio>
#include <cstring>
using namespace std;
bool visi[100];
bool flag[100][100];
int ans,cnt,n,k;
void dfs(int a)
{
if(cnt==k) {ans++;return ;} //k写成n了
if(a==n) return ;
int i;
for(i=0;i<n;i++)
{
if(!visi[i]&&flag[a][i])
{
cnt++;
visi[i]=true;
dfs(a+1);
cnt--;
visi[i]=false;
}
}
dfs(a+1);
}
int main()
{
int i,j;
char s[10];
//freopen("1.txt","r",stdin);
while(scanf("%d%d",&n,&k)!=EOF)
{
if(n==-1&&k==-1)
break;
memset(visi,false,sizeof(visi));
memset(flag,false,sizeof(flag));
cnt=0;ans=0;
for(i=0;i<n;i++)
{
scanf("%s",s);
for(j=0;j<n;j++) //n写成k了
{
if(s[j]=='#')
flag[i][j]=true;
// printf("%c",s[j]);
}
}
dfs(0);
printf("%d\n",ans);
}
return 0;
}