Cpper
C/C++高级工程师 Android高级软件工程师 IT集成工程师 音频工程师 熟悉c,c++,java,c#,py,js,asp等多种语言 程序猿
这段时间没咋编程序
就写个c++排列组合函数的使用吧
以后使用得着的
#include <iostream>
#include 
<vector>
#include 
<algorithm>
#include 
<boost/assign.hpp>
#include 
<boost/function.hpp>

using namespace std;
using namespace boost;
using namespace boost::assign;

inline 
void print_(int t){cout<<t<<" ";}
inline 
void print(vector<int>& vec)
{
    for_each(vec.begin(),vec.end(),print_);
    cout
<<endl;
}

//! 全排列测试
void test1()
{
    vector
<int> vec;
    vec 
+= 1,2,3,4,5,6,7,8;
    sort(vec.begin(),vec.end());
    
int i = 0;
    
do
    {
       print(vec);
       i
++;
    }
    
while(next_permutation(vec.begin(),vec.end()));
    std::cout
<<i<<std::endl;
}

//! 组合测试
size_t test2(int n,int m,boost::function<void(std::vector<int>& vec)> fn)
{
    vector
<int> p,set;
    p.insert(p.end(),m,
1);
    p.insert(p.end(),n
-m,0);
    
for(int i = 0;i != p.size();++i)
        
set.push_back(i+1);
    vector
<int> vec;
    size_t cnt 
= 0;
    
do{
        
for(int i = 0;i != p.size();++i)
            
if(p[i])
               vec.push_back(
set[i]);
        fn(vec);
        cnt 
++;
        vec.clear();
    }
while(prev_permutation( p.begin(), p.end()));
    
return cnt;
}

int main()
{
    test1();
    std::cout
<<test2(20,3,print)<<std::endl;
    
return 0;
}
....................................................................................................................

posted on 2010-12-29 11:21 ccsdu2009 阅读(5199) 评论(5)  编辑 收藏 引用 所属分类: 杂项boost库等
Comments
  • # re: c++排列组合函数
    ClassyK
    Posted @ 2010-12-30 13:43
    我只能再说一次,既然都用stl了,何必自己写排列组合。。
    尽管我的话有点伤人,不过还是希望楼主可以熟悉一下stl中的所有算法,避免自己造轮子  回复  更多评论   
  • # re: c++排列组合函数
    陈梓瀚(vczh)
    Posted @ 2010-12-31 10:46
    std::function也出现了,你可以不用boost那个了。  回复  更多评论   
  • # re: c++排列组合函数
    陈梓瀚(vczh)
    Posted @ 2010-12-31 10:46
    @ClassyK
    人家坐着爽嘛,我也觉得自己造轮子有益身心健康。  回复  更多评论   
  • # re: c++排列组合函数
    Θ§奏之章℡
    Posted @ 2011-08-05 13:22
    vector<int> vec;
    vec += 1,2,3,4,5,6,7,8;

    这是什么写法?boost添加的么?  回复  更多评论   
  • # re: c++排列组合函数
    空明流转
    Posted @ 2011-09-27 11:07
    @Θ&#167;奏之章℡
    boost.assign  回复  更多评论   

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理