【组合生成】字典序法生成下一个全排列

来源:互联网 发布:hp什么意思网络用语 编辑:程序博客网 时间:2024/05/16 07:29

算法什么的以后再搬了,先把代码搬上来。


#include <iostream>#include <vector>#include <algorithm> using namespace std;class Permutation{private:int length;vector<int> v;public:Permutation(int l){length = l;v.resize(l+1);for(int i=0;i<l;++i)v[i] = i+1;}bool next(){int p = 0;for(int i=length-1;i>=0;--i)if(i+1<length && v[i] < v[i+1]){p = i;break;}int max = -1;for(int i=p;i<length;++i){if(v[i] > v[p] && ( max<0 ||v[i] < v[max] ))max = i;}if(max == -1)return false;swap(v[p],v[max]);reverse(v.begin()+p+1,v.end()-1);return true;}friend ostream & operator << (ostream &o,const Permutation &p){for(int i=0;i<p.length;++i)o << p.v[i] << " ";o << endl;return o;}  };int main(){Permutation *P = new Permutation(4);cout << *P << endl; for(int i=0;i<=40;++i){if(P->next() == false)break;cout << *P << endl; }return 0;}


原创粉丝点击