一开始有点不会写这种dfs,后来到网上搜了一下,学会了sign标记。
#include <cstdio>
#include <cstring>
char map[10][10];bool sign[10];int total;
void dfs(int step,int n,int k){
if(k==0){
total++;
return ;
}
if(step==0)return ;
for(int i=1;i<=n;i++){
if(!sign[i]&&map[step][i]=='#'){
sign[i]=true;
dfs(step-1,n,k-1);
sign[i]=false;
}
}
dfs(step-1,n,k);
}
int main(){
int i,n,k;
while(scanf("%d%d",&n,&k)&&n+1&&k+1){
total=0;
for(i=1;i<=n;i++)scanf("%s",map[i]+1);
memset(sign,0,sizeof(sign));
dfs(n,n,k);
printf("%d\n",total);
}
}