Advertisement
Guest User

Untitled

a guest
Apr 26th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.92 KB | None | 0 0
  1. #include <vector>
  2. #include <iostream>
  3. #include <cassert>
  4.  
  5. using namespace std;
  6.  
  7. class Perm {
  8. vector<int> as;
  9. int now = -1;
  10. Perm* p = NULL;
  11.  
  12. public:
  13.  
  14. void nextp() {
  15. if(p) delete p;
  16.  
  17. if(++now < as.size()) {
  18. vector<int> as_(as);
  19. as_.erase(as_.begin()+now);
  20. p = new Perm(as_);
  21. }
  22. }
  23.  
  24. Perm(vector<int> &as_) {
  25. as = as_;
  26. if(as.size() == 1) now = 0;
  27. else nextp();
  28. }
  29.  
  30. vector<int> * next() {
  31. if(as.size() == 1) {
  32. now++;
  33. return new vector<int>(as);
  34. } else {
  35. vector<int> *ret = p->next();
  36. ret->push_back(as[now]);
  37. if(p->end()) nextp();
  38. return ret;
  39. }
  40. }
  41.  
  42. bool end() { return as.size() <= now; }
  43. };
  44.  
  45. int main()
  46. {
  47. vector<int> as = {1,2,3};
  48. Perm perm(as);
  49.  
  50. while(!perm.end()) {
  51. vector<int> *seq = perm.next();
  52.  
  53. // use seq
  54. for(int i=0; i<seq->size(); i++)
  55. cout << (*seq)[i] << ' ';
  56. cout << endl;
  57.  
  58. delete seq;
  59. }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement