题目链接:POJ1321
数据很水,入门题目。
AC代码:
深搜+回溯 要注意回溯的时候,标记要置为0。
#include<stdio.h>
#include<string.h>
const int maxn=10;
char mp[maxn][maxn];
int n,k,ans;
bool vis[maxn];
void dfs(int row,int num){
if(num==k){
ans++;
return;
}
if(row>n) return ;
for(int i=1;i<=n;i++){
if(mp[row][i]=='#'&&!vis[i]){
//num++;
vis[i]=1;
dfs(row+1,num+1);
vis[i]=0;
}
}
dfs(row+1,num);
return;
}
int main(){
while(scanf("%d%d",&n,&k)==2&&n!=-1){
for(int i=1;i<=n;i++){
scanf("%s",mp[i]+1);
}
//for(int i=1;i<=n;i++) printf("%s\n",mp[i]);
ans=0;
memset(vis,false,sizeof(vis));
dfs(1,0);
printf("%d\n",ans);
}
return 0;
}