基于集合的子集与集合的全排列的相关问题
基于集合的子集与集合的全排列的相关问题
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下:#includeusingnamespacestd;//非递归求解所有的子集voidfun(inta[],intn){in...

复制代码 代码如下:

#include<iostream>

using namespace std;

//非递归求解所有的子集

void fun(int a[] , int n)

{

int i = 0 , j ;

while(i < (1<<n)) //2的n次方

{

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

{

if(i&(1<<j))

{

cout<<a[j]<<"t";

}

}

cout<<endl;

i++;

}

}

//递归求解所有的子集

void print(int a[],bool flag[],int k,int length)

{

if(k>=length)

{

for(int i=0;i<length;i++)

{

if(flag[i]) cout<<a[i]<<"t";

}

cout<<endl;

return ;

}

for(int j=0;j<2;j++)

{

if(j==0)

{

flag[k]=true;

print(a,flag,k+1,length);

flag[k]=false;

}

else

{

flag[k]=false;

print(a,flag,k+1,length);

flag[k]=true;

}

}

}

//集合的全排列算法

void Perm(int list[], int k ,int length)

{

if(k>=length)

{

for(int i=0;i<length;i++)

cout<<list[i]<<"t";

cout<<endl;

return ;

}

for( int j=k;j<length;j++)

{

swap(list[k],list[j]);

Perm(list,k+1,length);

swap(list[k],list[j]);

}

}

int main()

{

int list[]={1,2,3,4};

bool flag[]={false,false,false,false};

fun(list,4);

print(list,flag,0,4);

Perm(list,0,4);

return 0;

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类