全排列实现
2016-03-23 00:03
351 查看
#include<iostream> #include<vector> using namespace std; class Node{ public: int number; int flag;//R:1 L:-1 }; class AllPlace{ public: vector<Node> A; AllPlace(int t); void Out(); void Place(); bool CanDo(); }; AllPlace::AllPlace(int t ){ A.resize(t); for(int i=0;i<t;i++){ A[i].number=i+1; A[i].flag=-1; } } void AllPlace::Out(){ for(int i=0;i<A.size();i++) cout<<A[i].number<<" "; } bool AllPlace::CanDo(){ int m=0; int n=A.size(); if(A[0].flag==-1)m++; if(A[n-1].flag==1)n--; for(int i=m;i<n;i++) if(A[i].number>A[i+A[i].flag].number)return true; return false; } void AllPlace::Place(){ int count1=1; cout<<count1<<" : "; Out(); cout<<endl; count1++; while(CanDo()){ int k=-1; int max1=-1; for(int i=0;i<A.size();i++){ if(A[i].number>A[i+A[i].flag].number&&A[i].number>max1&&i+A[i].flag>=0&&i+A[i].flag<A.size()){k=i;max1=A[i].number;} } int m=k+A[k].flag; max1=A[k].number; swap(A[k],A[m]); for(int i=0;i<A.size();i++) if(A[i].number>max1)A[i].flag=-A[i].flag; cout<<count1<<" : "; Out(); cout<<endl; count1++; } } int main(){ AllPlace s(3); s.Place(); return 0; }
相关文章推荐
- Btree 索引
- 理解闭包
- 个人对结对编程的体会
- 和免费比起来,收费的才是捷径
- MFC基础之椭圆、多边形及饼图
- JS简单实现JQuery选择器
- MFC基础之画刷和画笔
- 房地产行业商业智能解决方案分享
- 云豹直播,一家专业做直播系统的公司——手机直播强势推出!
- 倾斜的PDF页面怎样通过PDF Transformer+修正
- 了解iMindMap移动端中三种分支形态吗?
- Effective C++: 尽量不要在构造函数中调用虚函数(virtual-function).
- 成员变量 局部变量比较
- 《小平工作日志》Java 中 Enum 枚举类型使用大全
- windows64位redies的安装教程
- maven struts--Could not find action or result的解决方案
- 零售企业自建商城网站已是大势所趋
- html5 bootstrap响应式视差滚动网页单页模板
- MySQL数据库引擎、事务、锁
- Flex布局中的align-items属性和align-content属性的区别