标题:[分享][经验][开源]C++排列组合算法
只看楼主
冰的热度
Rank: 2
等 级:禁止访问
威 望:5
帖 子:404
专家分:0
注 册:2006-12-2
 问题点数:0 回复次数:4 
[分享][经验][开源]C++排列组合算法
#include <iostream>
using namespace std;
void jisuan(int a[],int m,int n,int k,int temp);
int num(int m,int n);
int jiecheng(int a);
void main()
{
int m,n;
cout<<"请输入M和N:"<<endl;
cin>>m>>n;
cout<<"一共 "<<num(m,n)<<" 种组合"<<endl;
int a[100];
jisuan(a,m,n,-1,-1);
}
void jisuan(int a[],int m,int n,int k,int temp)
{
temp++;
if(temp<n)
for(int i=k+1;i<m;i++)
{
a[temp]=i+1; //赋值
jisuan(a,m,n,i,temp); //递归调用
}
else
{
for(int j=0;j<n;j++)
{
cout<<"\t"<<a[j]; //输出
}
cout<<endl;
}
}
//计算个数
int num(int m,int n)
{
int sum;
sum=jiecheng(m)/(jiecheng(n)*jiecheng(m-n));
return sum;
}
//求阶乘
int jiecheng(int a)
{
int h=1;
for(int i=1;i<=a;i++)
h=h*i;
return h;
}
搜索更多相关主题的帖子: 算法 排列 开源 经验 
2007-08-22 18:24
冰的热度
Rank: 2
等 级:禁止访问
威 望:5
帖 子:404
专家分:0
注 册:2006-12-2
得分:0 

经C++教室版主不吝赐教,发现算法中的一个小小问题,问题出现在计算个数上,
现改正如下
#include <iostream>
using namespace std;
void jisuan(int a[],int m,int n,int k,int temp);
int numOfComb(int m, int n);
void main()
{
int m,n;
cout<<"请输入M和N:"<<endl;
cin>>m>>n;
cout<<"一共 "<<numOfComb(m,n)<<" 种组合"<<endl;
int a[100];
jisuan(a,m,n,-1,-1);
}
void jisuan(int a[],int m,int n,int k,int temp)
{
temp++;
if(temp<n)
for(int i=k+1;i<m;i++)
{
a[temp]=i+1; //赋值
jisuan(a,m,n,i,temp); //递归调用
}
else
{
for(int j=0;j<n;j++)
{
cout<<"\t"<<a[j]; //输出
}
cout<<endl;
}
}
//计算个数
int numOfComb(int m, int n)
{
int r=1;
int i;

for(i=1; i<=n; ++i)
{
r *= (m-i+1);
r /= i;
}

return r;
}


科学是永恒之迷...... 我的博客http://blog..cn/u/1267727974 阅读我的blog,懂与不懂都是收获!
2007-08-23 21:36
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
得分:0 

很好啊,递归回溯!


初始版本没考虑到阶乘大了会溢出!也可以在计算组合的函数中加个计数器。

+1

[此贴子已经被作者于2007-8-23 23:13:01编辑过]


Fight  to win  or  die...
2007-08-23 22:27
冰的热度
Rank: 2
等 级:禁止访问
威 望:5
帖 子:404
专家分:0
注 册:2006-12-2
得分:0 
自己顶一下

科学是永恒之迷...... 我的博客http://blog..cn/u/1267727974 阅读我的blog,懂与不懂都是收获!
2007-10-08 18:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-164663-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.111950 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved