#include <bits/stdc++.h>
using namespace std;
int n,a[100],b[100];//b数组用来标记数字i是否可用,a数组用来存放新的排列
void dfs(int x){//为第x个位置查找可以使用的数字
if(x==n+1){//当要处理第n+1个位置时说明第n个位置已经处理完了
for(int i=1;i<=n;i++)
cout<<a[i];
cout<<endl;
return;//完成一组排列后返回,尝试其他可能
}
for(int i=1;i<=n;i++){//从1—n中的数字中查找没有使用过的数字
if(!b[i]){//若b[i]为0则说明当前数字i可用则使用它
b[i]=1;//标记数字i为使用状态
a[x]=i;//存储当前排列的第x个数为i
dfs(x+1);
b[i]=0;//说明当前位置要空出来进行重新尝试,则i不需要放在这个位置,重新把它置为0即可再使用了
}
}
}
int main(){
cin>>n;
dfs(1);//处理第一个位置
return 0;
}
全排列回溯
最新推荐文章于 2025-04-30 16:36:16 发布