集合子集問題:
給的乙個集合按元素個數列出所有列出所有集合子集,如:
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選還是不選。答案需要另乙個向量根據搜尋的路徑填充。第二...