深搜解题,抽象递归,小康出品,必属精品!
2025-10-18 09:54:05
发布于:浙江
2阅读
0回复
0点赞
###根据盒子思维###
###想象有n个盒子###
###可以放任意数字###
###但放过就不能放了###
###所以需要打标记###
###放过以后位置x+1###
###接着递归>_<###
###所以他是深搜(只不过他是一维的罢了)###
###代码如下:###
#include<bits/stdc++.h>
using namespace std;
int n;
int vis[15];//定义标记数组
int box[15];//定义位置数组(box)
void dfs_q(int x){//dfs_q全排列(深搜)
if(x==n+1){//越界(超出范围)
for(int i=1;i<=n;i++){
cout<<setw(5)<<box[i];//输出box位置的值(5个场宽)推荐用setw(x)>_<
}
cout<<endl;//别忘了换行!!!!!
return;
}
for(int i=1;i<=n;i++){
if(vis[i]==0){//判断
box[x]=i;//第x个盒子里装上i
vis[i]=1;//打标记
dfs_q(x+1);//抽象的递归(遍历下一个盒子)
vis[i]=0;//将标记数组还原,准备下一次排列
}
}
}
int main(){
cin>>n;
dfs_q(1);//进入我们最喜欢的深搜阶段(⊙o⊙)
return 0;
}
###代码就长这样,喜欢就点个赞吧###
(关注,关注,求关注!!!!!(必回关,否则我是狗(汪汪,汪汪汪,汪汪汪汪汪!)))
这里空空如也



有帮助,赞一个