组合数学排列与组合代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

N的r排列

# include

using namespace std;

#define maxlen 100

int finish(int *b,int max,int maxnum) {

int judge2=0;

for(int i=0;i

{

if(b[i]!=(maxnum-max+1+i))

judge2=1;

}

return judge2;

}

void print(int *b,int num)

{

cout<<"{";

for(int i=0;i

cout<

cout<<"}";

cout<

}

void proc(int *b,int num,int maxnum) {

int k=num;

int i;

int judge=0;

while(judge==0)

{

k--;

if(b[k]<=maxnum-1)

{

judge=1;

for(i=0;i

{

if(b[k]+1==b[i])

judge=0;

}

}

}

int j=1;

int x=b[k];

for(i=k;i

{

b[i]=x+j;

j++;

}

}

int exchange(int *a,int *b,int *c,int num) {

for(int j=0;j

{

a[j]=b[j];

c[j]=-1;

}

return 0;

}

int max(int *a,int *c,int &judge,int n) {

judge=0;

int max;

max=-1;

a[max]=-1;

int i=0;

for(i;i

{

if(c[i]==-1)

{

while(1)

{

if(i!=0&&a[i]>a[i-1])

{

if(a[max]

{

max=i;

judge=1;

}

}

break;

}

}

else

if(c[i]==1)

{

while(1)

{

if(a[i]>a[i+1]&&i!=n-1)

{

if( a[max]

{

max=i;

judge=1;

}

} break;

}

}

}

for(int j=0;j

{

if(a[j]>a[max])

{

if(c[j]==-1)

c[j]=1;

else

c[j]=-1;

}

}

return max;

}

void change(int *a,int *c,int max)

{

int temp;

if(c[max]==-1)

{

temp=a[max];

a[max]=a[max-1];

a[max-1]=temp;

temp=c[max];

c[max]=c[max-1];

c[max-1]=temp;

}

else

{

temp=a[max];

a[max]=a[max+1];

a[max+1]=temp;

temp=c[max];

c[max]=c[max+1];

c[max+1]=temp;

}

}

void paixun(int *a,int *c,int n)

{

int judge=1;

int i=-1;

while(1)

{

i=max(a,c,judge,n);

if(judge==0)

break;

change(a,c,i);

print(a,n);

}

int main()

{

int num,maxnum;

int b[maxlen];

int a[maxlen];

int c[maxlen];

cout<<"求N个元素的R排列。输入N R:"<

cin>>maxnum;

cin>>num;

for(int i=0;i

{

b[i]=i+1;

}

while(finish(b,num,maxnum)==1)

{

print(b,num);

exchange(a,b,c,num);

paixun(a,c,num);

proc(b,num,maxnum);

}

print(b,num);

system("PAUSE");

return 0;

}

N的r组合—-格雷码生成

#include

using namespace std;

#define maxlen 100

void CZO(int *b,int num,int &judge)

{

int count;

for(int i=0;i

{

if(b[i]==1)

count++;

}

if(count%2==0)

相关文档
最新文档