数字全排列题解
2026-07-19 16:52:48
发布于:广东
10阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int n;
bool visit[15];
vector<int>a;
void dfs(int p){
if(p==n+1){//如果确认完了当前位置p 输出排列方案
for(int x:a)cout<<x<<' ';
cout<<'\n';//输出换行
return ;//执行完return防止死循环
}
for(int i=1;i<=n;i++){
if(visit[i])continue;
//如果当前visit[i]非0 说明已经访问过
//跳过当前的i 从剩下的元素中做决策
//如果没有执行if 说明当前i没有被选过
visit[i]=1;//标记当前位置 表示已经访问过
a.push_back(i);
dfs(p+1);
visit[i]=0;
//回溯 以为着当前位置p选择i的排列方案都已经确认
//重置i的访问状态 使得i可以被其他位置p选择
a.pop_back();
//将i从a数组中删除 让其他元素可以放到p位置中
}
}
int main(){
cin>>n;
dfs(1);//从第一个元素开始做决策
}
这里空空如也





有帮助,赞一个