基于集合的子集与集合的全排列的相关问题
程序员文章站
2023-12-16 10:55:04
复制代码 代码如下:#includeusing namespace std;//非递归求解所有的子集void fun(int a[] , i...
复制代码 代码如下:
#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;
}
推荐阅读
-
基于集合的子集与集合的全排列的相关问题
-
DFS中关于全排列、组合、子集中有重复数字去重的问题
-
关于集合与数组的区别,Collection、List、Set接口的作用及相关的子类
-
关于 PHP 中比较array_diff与array_intersect比较差集合交际的问题
-
Java基础-----与Java集合相关的数据结构&Java集合特点、底层实现、是否线程安全&集合使用选取原则&集合的常见方法及遍历方式
-
关于 PHP 中比较array_diff与array_intersect比较差集合交际的问题
-
DFS中关于全排列、组合、子集中有重复数字去重的问题
-
已知两个链表A和B分别表示两个集合, 其元素递增排列. 设计一个算法, 求出A与B的交集, 并存放在C链表中
-
已知两个链表A和B分别表示两个集合,其元素递增排列。请设计一个算法,用于求出A与B的交集,并存放在A链表中。