Files
Data-Structure/Algorithm/Recursion/P1044 [NOIP 2003 普及组] 栈.cpp
2025-09-15 22:16:09 +08:00

70 lines
1.3 KiB
C++

#include <iostream>
#include <set>
#include <deque>
using namespace std;
set<deque<int>> result;
void dfs(deque<int>& path, deque<int>& stack, deque<int>& left){
if(stack.size() == 0 && left.size() == 0){
result.emplace(path);
return;
}
else if(stack.size() == 0){
int tmp = left.front();
stack.push_back(tmp);
left.pop_front();
dfs(path, stack, left);
left.push_front(tmp);
stack.pop_back();
}
else if(left.size() == 0){
int tmp = stack.back();
stack.pop_back();
path.push_back(tmp);
dfs(path, stack, left);
stack.push_back(tmp);
path.pop_back();
}
else {
{
int tmp = left.front();
left.pop_front();
stack.push_back(tmp);
dfs(path, stack, left);
stack.pop_back();
left.push_front(tmp);
}
{
int tmp = stack.back();
stack.pop_back();
path.push_back(tmp);
dfs(path, stack, left);
path.pop_back();
stack.push_back(tmp);
}
}
}
int main(){
int n;
cin >> n;
deque<int> l(n), s, p;
for(int i = 0; i < n; i++){
l[i] = i + 1;
}
dfs(p, s, l);
cout << result.size() << endl;
/*
for(auto x : result){
for(auto y : x){
cout << y << " ";
}
cout << endl;
}*/
for(auto x : *result.begin()){
cout << x << " ";
}
cout << endl;
return 0;
}