集合子集問題

2021-06-06 17:31:10 字數 1273 閱讀 4746

集合子集問題:

給的乙個集合按元素個數列出所有列出所有集合子集,如:

0個元素:{}

1個元素:,,

2個元素:,,

3個元素:

輸出:{},,,,,,,

方法:採用乙個二進位制數列表示解,如:[000]代表{},[100]代表

演算法:1、乙個字串陣列儲存解。

2、用乙個整形陣列儲存不同元素個數解應反正字串陣列中得位置。

**:#include

#include

usingnamespace std;

intcorder(int n,int a)

//排列數,n個中選a個的總數

int i,a1=1,a2=1;

for(i=n-a+1;i<=n;i++)

a1*=i;

for(i=2;i<=a;i++)

a2*=i;

return a1/a2;

intbitstring(int num,char c,int n)

//將num轉換為2進製字串儲存於c中,返回c中'1'的個數

int i,k=0;

for(i=n-1;i>=0;i--)

if(num%2==0)

c[--n]='0';

else

k++;

c[--n]='1';

num/=2;

return k;

voidbitorder(int n,char ***c)

*c=new char*[pow(2,n)];

//a用於儲存不同元素個數的位置

int *a=new int[n],i,k;

a[0]=0;

a[1]=1;

for(i=2;i<=n;i++)

a[i]=a[i-1]+corder(n,i-1);

for(i=0;ichar *temp=new char[n+1];

temp[n]=0;

k=bitstring(i,temp,n);

(*c)[a[k]++]=temp;

intmain()

char **c;

int n=3;

bitorder(n,&c);

for(int i=0;icout

結果:

求集合子集問題

src是源資料集合,currentindex是在源集合裡的當前下標,length為源集合的大小,dest是結果集合,num是結果集合的元素個數,初始化時,結果集合要和源集合的個數相等.void match int src,intcurrentindex,intlength,int dest,intn...

求集合子集 C 實現

思路 int arr 遞迴遍歷整個陣列,遍歷到第0個位置,我們就求出含有0的所有子集,遍歷到第1個位置,我們就求出含有1不含0的所有子集,依次類推,遍歷到第3個位置,我們求出含有3而不含0 1 2 的所有子集。loc表示當前位置 loc len為遞迴終止條件 void getallsubset in...

組合 子集問題彙總

子集的問題的思路也分兩個方向,一種是解空間樹是關於每個數選還是不選,結點取值範圍就是true or false。解向量的長度是固定的,即candidates的個數,而且只有完全解才是問題的解。解向量不是直接的答案,而是標誌每個candidates選還是不選。答案需要另乙個向量根據搜尋的路徑填充。第二...