用栈模拟递归实现全排列
这是用递归写的全排列
#include <bits/stdc++.h>
using namespace std;
vector<int> a,vis,res;
int n;
void dfs(){
if(res.size()==n){
for(auto &it:res) cout<<it<<' ';
cout<<endl;
return;
}
for(int i=0;i<n;i++){
if(vis[i]) continue;;
vis[i]=1;
res.push_back(a[i]);
dfs();
vis[i]=0;
res.pop_back();
}
}
int main(){
cin>>n;
a.resize(n);
vis.assign(n,0);
for(int i=0;i<n;i++) cin>>a[i];
dfs();
}
下面这个是用栈写的,写一半到了回溯这一步非常迷惑,因为递归可以在递归的下面回溯,但是用栈的话,入栈以后就没法回溯了
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> a(n),vis(n,0),res(n);
for(int i=0;i<n;i++) cin>>a[i];
stack<int> st;
st.push(0);
while(!st.empty()){
int cur=st.top();
st.pop();
for(int i=0;i<n;i++){
}
}
}