同样是华为oj里的一道题,主要是利用了next_permutation这个函数实现了全排列。
#include <iostream>
#include <string>#include <vector>
#include<sstream>
#include<algorithm>
#include<stack>
using namespace std;
bool isPop(vector<int> rec, vector<int>p)
{
if (rec.size() < 0 || p.size() < 0)
return false;
stack<int> s;
int j = 0;
for (int i = 0; i < rec.size(); i++)
{
s.push(rec[i]);
while (j < p.size() && !s.empty() && p[j] == s.top())
{
s.pop();
j++;
}
}
return s.empty();
}
int main() {
int n;
while (cin>>n) {
int *p = 0;
vector<int> rec;
vector<int> popNum;
for (int i = 0; i < n; i++)
{
int tmp = 0;
cin >> tmp;
rec.push_back(tmp);
popNum.push_back(tmp);
}
sort(popNum.begin(), popNum.end());
do
{
if (isPop(rec, popNum))
{
for (int i = 0; i < popNum.size()-1; i++)
cout << popNum[i] << " ";
cout << popNum[n - 1] << endl;
}
} while (next_permutation(popNum.begin(), popNum.end()));
}
return 0;
}