1.这道题和一般的深搜题有点不一样,这个逐行搜索,故只要判断每列是否符合条件就行了。
2.如果按照普通的搜索题搜的话,会出现重复搜索的情况,比较棘手。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
char map_[10][10];
int vis[10];
int ans;
int n,k;
int dfs(int f,int row)
{
if(f==k)
{
ans++;
return 0;
}
for(int i=row;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(map_[i][j]=='#'&&!vis[j])
{
vis[j]=1;
//f++;
dfs(f+1,i+1);
//f--;
vis[j]=0;
}
}
}
return 0;
}
int main()
{
while(cin>>n>>k)
{
ans=0;
if(n==-1&&k==-1)
{
break;
}
for(int i=0;i<n;i++)
{
scanf("%s",map_[i]);
}
dfs(0,0);
cout<<ans<<endl;
}
return 0;
}