一些子集生成的方法

2022-09-15 02:18:16 字數 1707 閱讀 4432

#include #include using namespace std;

#define n 10 //代表生成0-9的子集

void print_subset(int n, int* a, int cur);

void print_subset(int n, int* a, int cur)

printf("\n"); //輸出集合後,要輸出乙個回車進行分隔(因此,當cur等於0時這裡輸出的是空集)

int s = cur ? a[cur - 1] + 1 : 0; //s代表確定當前元素的最小可能值(例如a中已經有了乙個元素0,那麼下次遞迴時cur就是1,那麼當前元素的最小可能值就是a[cur-1]+1(因為a之中的元素編號都是從小到大排列的,這是定序的技巧(避免同乙個集合列舉兩次,例如:集合輸出時只能為而不能為)

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

}int main()

#include #include using namespace std;

#define n 10

void print_subset(int n, int* b, int cur); //代表構造位向量法的函式

void print_subset(int n, int* b, int cur)

} printf("\n"); //輸出回車以分隔集合

return; //輸出完集合後,我們要進行返回(回溯)以便於輸出下乙個集合

} b[cur] = 1; //代表選擇當前元素(cur)新增到集合中

print_subset(n, b, cur + 1); //進行遞迴以便於選擇下乙個元素

b[cur] = 0; //代表不選擇當前元素(cur)新增到集合中

print_subset(n, b, cur + 1); //進行遞迴以便於選擇下乙個元素

void print_subset(int n, int s); //代表構造二進位制法的函式

void print_subset(int n, int s)

} printf("\n");

}int main()

}

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

}

C 子集生成方法

這道題是資料結構 演算法與應用c 的書籍的練習題25題,首先我先列出詳細題目 編寫乙個c 遞迴函式,輸出n個元素的所有子集。例如,三元素集的子集是 空集 這些子集用0 1組成的 序列來表示分別是000,100,010,001,110,101,011,111 0表示相應的元素不在子集中,1表示相應的元...

NSArray的一些方法

nsarray 不可變陣列類 建立只有乙個元素的陣列 arraywithobject nsarray建立的陣列內部存放的元素必須是 物件 型別 nsarray array nsarray arraywithobject 1 arraywithobject接收的引數是 物件 型別資料,1 可以看做是乙...

NSString的一些方法

1.建立字串 直接賦值 nsstring str1 iphone nslog str1 僅僅是初始化而沒有賦值 nsstring str2 nsstringalloc init nslog str2 initwithstring的作用 將initwithstring後面的值拷貝到開闢的空間中 ini...