递归回溯法
2025-08-03 21:51:51
发布于:福建
1阅读
0回复
0点赞
这题其实肥肠的简单,就是普通的递归回溯法,话不多说,直接上代码!
#include<bits/stdc++.h>
using namespace std;
int n,k,a[9][9],vis[9],sum;
string s;
void dfs(int y,int x){
if(x==k){
sum++;
return;
}
if(y>=n){
return;
}
for(int i=0; i<n; i++){
if(vis[i]==0 && y>=0 && x>=0 && y<n && x<n && a[y][i]){
vis[i]=1;
dfs(y+1,x+1);
vis[i]=0;
}
}
dfs(y+1,x);
}
int main(){
while(cin>>n>>k){
if(n==-1 && k==-1) break;
for(int i=0; i<n; i++){
cin>>s;
for(int j=0; j<n; j++){
if(s[j]=='#'){
a[i][j]=1;
}
}
}
dfs(0,0);
printf("%d\n",sum);
sum=0;
memset(a,0,sizeof(a));
memset(vis,0,sizeof(vis));
}
return 0;
}
(花了半个小时写的代码,点个赞吧,求求了!)
这里空空如也
有帮助,赞一个