从含有m个元素的集合中任选n个的算法

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

问题:从含有M个元素的集合中任选n个的排列组合。

思路:利用M进制的数组来表示

源程序如下(在C-Free 3.5中测试)

/*-----------------------------------------------------------------------

Author : RainFly(傲月寒星)

3-25-05

Describe:关于幂集的一个算法,也是从m个元素中任选n个

的算法.

if you have other ideas,please email me:yan_diao266071@163.com

Test in C-Free 3.5

------------------------------------------------------------------------*/

#include <iostream>

#include <vector>

#include <stdlib.h>

#include <string>

using namespace std;

void ssort(int n,int str[],int m,int N);

int main()

{

int i,N,j=0,m,count,temp,i_begin=1,i_end,M,flag=0;

vector <string> iInt;

string ss;

cout<<"How many elements do you want the set include:";

cin>>M;

cout<<"Please input "<<M<<"elements:";

int * str=new int[M];

vector <string>::iterator vi;

for (i = 0; i <M; i++)

{

cin>>ss;

iInt.push_back(ss);

}

cout<<endl;

cout<<"The elments of this set is:";

for (vi = iInt.begin(); vi != iInt.end(); vi++)

cout<<*vi<<" ";

cout<<endl;

/*

output n elements

*/

cout<<"Please input a number(0~"<<M<<"):";

cin>>N;

//insure the scope of i

for(i=0;i<N-2;i++)

i_begin=i_begin*M;

i_end=i_begin*M*M;

if(i_begin==1)

i_begin=0;

if(N==1)

i_end=M;

for(i=i_begin;i<i_end;i++)

{

flag=0;

ssort(i,str,M,N);

for(j=0;j<N-1;j++)

for(m=j+1;m<N;m++)

if(str[j]>=str[m])

flag=1;

if(flag)

continue;

cout<<"<";

for(j=0;j<N;j++)

{

if(j!=N-1)

cout<<iInt[str[j]]<<",";

else

cout<<iInt[str[j]];

}

cout<<">";

}

delete [] str;

return 0;

}

void ssort(int n,int str[],int m,int N)

{

int i=0,count=0,temp;

while(n>=0)

{

if(n<m)

{

str[i]=n;

count++;

break;

}

str[i]=n%m;

n=n/m;

count++;

i++;

}

//sort this array

if(N>1&&count<N)

str[i+1]=0;

for(i=0;i<N/2;i++)

{

temp=str[i];

str[i]=str[N-i-1];

str[N-i-1]=temp;

}

}

Example:

How many elements do you want the set include:5

Please input 5 elements:a1 a2 a3 a4 a5

The elments of this set is:a1 a2 a3 a4 a5

Please input a number(0~5):2

<a1,a2><a1,a3><a1,a4><a1,a5><a2,a3><a2,a4><a2,a5><a3,a4><a3,a5><a4,a5>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航