题目链接:传送门
分析:运用DFS,一开始就想到DFS但是一直都是一个一个遍历还设置了很多变量,结果不是WA就是超时,看了题解别人都是一行一行加的。。。自己真的菜的真实。。。
AC代码:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char c[10][10];
int vis[10];
int n,k;
int ans,total;
void dfs(int line) {
if(k==total) {
ans++;
return;
}
if(line>=n) return;
for(int i=0; i<n; i++)
if(vis[i]==0&&c[line][i]=='#') {
vis[i]=1;
total++;
dfs(line+1);
vis[i]=0;
total--;
}
dfs(line+1);
}
int main() {
while(cin>>n>>k) {
if(n==-1&&k==-1) break;
ans=0;
total=0;
for(int i=0; i<n; i++)
cin>>c[i];
memset(vis,0,sizeof(vis));
dfs(0);
cout<<ans<<endl;
}
return 0;
}