没有合适的资源?快使用搜索试试~ 我知道了~
组合算法|C++实现
5星 · 超过95%的资源 需积分: 27 29 下载量 87 浏览量
2011-04-29
10:44:51
上传
评论
收藏 1KB TXT 举报
温馨提示
试读
2页
组合算法,在VC中调试通过。改写了排列的一段代码, 可以完成组合功能。
资源推荐
资源详情
资源评论
#include<stdlib.h>
#include<String.h>
#include<iostream.h>
inline void Swap(int*lhs,int*rhs){int tmp= *lhs; *lhs=*rhs; *rhs=tmp;}
void Reverse(int*beg,int*end){while(beg<end)Swap(beg++,--end);}
void Print(int*beg,int*end){while(beg!=end)cout<<*beg++<<' ';cout<<endl;}
inline int Cmp(const void*lhs,const void*rhs)
{return *(const int*)rhs - *(const int*)lhs;}
void Permutation(int* beg, int* mid, int* end)
{ int k(0),*p,*q;
int i(2);
if(end-mid > 1)
qsort(mid,end - mid,sizeof(int),Cmp);Print(beg,mid);
int* nav = end - 1;
while(i)
{
int* tmp = nav;
if(*--nav < *tmp)
{
int* rmbt = end;
while(*--rmbt <= *nav)
if(rmbt==mid)
{
Swap(nav,tmp);
nav--;
rmbt = end;
}
Reverse(nav, rmbt+1);
qsort(mid, end - mid, sizeof(int), Cmp);
Print(beg, mid);
#include<String.h>
#include<iostream.h>
inline void Swap(int*lhs,int*rhs){int tmp= *lhs; *lhs=*rhs; *rhs=tmp;}
void Reverse(int*beg,int*end){while(beg<end)Swap(beg++,--end);}
void Print(int*beg,int*end){while(beg!=end)cout<<*beg++<<' ';cout<<endl;}
inline int Cmp(const void*lhs,const void*rhs)
{return *(const int*)rhs - *(const int*)lhs;}
void Permutation(int* beg, int* mid, int* end)
{ int k(0),*p,*q;
int i(2);
if(end-mid > 1)
qsort(mid,end - mid,sizeof(int),Cmp);Print(beg,mid);
int* nav = end - 1;
while(i)
{
int* tmp = nav;
if(*--nav < *tmp)
{
int* rmbt = end;
while(*--rmbt <= *nav)
if(rmbt==mid)
{
Swap(nav,tmp);
nav--;
rmbt = end;
}
Reverse(nav, rmbt+1);
qsort(mid, end - mid, sizeof(int), Cmp);
Print(beg, mid);
资源评论
- u0105290862013-11-05这是个比较难的算法,我没怎嘛看懂
- 公子小白Gallen2015-01-09可以使用!
阿飞0009
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功