列出所有子集(採用列出2進製數的方法)
問題描述:列出給定集合的所有子集合,包括空子集。
思路:乙個集合的所有子集合的個數是
11111 01111
+ 1
--------------------
11111 10000
當這個數加1時,如果當前位是1,那麼當前位就變成0並且向前進1位;接著前一位如果是1,也會變成0並且繼續進製;以此類推,直到遇到當前位是0的情況,就變成1,然後整個加法就完成了。依照此思路,很容易寫出**。
#include
#include
#define max 1000
int n=4;
// the number of the set elements
intset
[max]=;
int path[max]=;
int count=1;
//prototype
void print_set();
int main(
)\n"
,count)
;for
(index=0;index
}count++;
printf(
"%d:
return 0;
}void print_set(
)printf(
"}\n");
} 參考資料:《c語言名題精選百則技巧篇》
問題描述:寫乙個程式,用字典順序把乙個集合的所有子集找出來。
此題的思路來自《c語言名題精選百則技巧篇》:字典順序,也就是字串比較時的順序規則。可以採取這樣的思路
先定義n是集合的個數並且集合是已經從小到大排好順序的的集合。集合從開始(此時下標index=0),
1.當state[i]
2.當state[index]==n時,就不能向右邊進行擴充套件了,此時就需要向左邊處理了。此時的集合是,那麼,要找比這個集合剛好大一點的,就是,所以就可以歸納出規則為:將index減1並且將state[index]加1。
3.如果state[0]==n,那麼迴圈就結束,反之則重複第1,2步,直到state[0]==n。
**如下:
1 #include 2
#define max 100034
intmain()5;
8int index=0;9
int count=2
;10 printf("
1:{}\n2:\n");
11while(set[0]!=n)
1218
else
1923
inta_index;
24 count++;
25 printf("
%d:\n");
29}30return0;
31 }
12345
1235
1241245
12513
1341345
13514
14515
2 子集不是全排列
參考資料:《c語言名題精選百則技巧篇》
產生全排列問題
[cpp]view plain
copy
//全排列的遞迴實現
#include
#include
void
swap(
char
*a,
char
*b)
//k表示當前選取到第幾個數,m表示共有多少數.
void
allrange(
char
*pszstr,
intk,
intm)
else
} } void
foo(
char
*pszstr)
intmain()
當然,這還缺少遞迴的終止條件(以上面來看是永運不會停止的);不過這很簡單,當 遞迴呼叫時,若l到r之間至少有3個元素,就做下去,而當只有兩個元素時就不必遞迴 呼叫了,此時接下來的兩步正好就是兩個元素的排列(兩個元素的排列只有兩種,一種是 輸入,另一種是兩個元素互換——反過來排)。由此,遞迴韹序就可以寫出來,這就是程式 permu—lr.c。
【問題實現】
c**
#include
#include
#define loop 1
#define swap(a,b)
#define reverse(a,b)
#define display(n)
void again(int perm, int l, int r)
if (i > l )
else
break;
} }
void permut(int perm, int n)
#define maxsize 20
void main(void)
python全排列和子集
獲取全集 def get all set list,cur 0 global result2 if cur len result2 print result2 return for each in list if each not in result2 cur 如果下乙個元素不在前面已經出現的元素裡...
全排列 全排列ii 子集 子集ii
2 全排列ii 3 子集 4 子集ii 5 資料排列 解題步驟 首先,要通過讀題完成下面三個步驟 1 描述解的形式,定義乙個解空間,它包含問題的所有解。2 構造狀態空間樹。3 構造約束函式 用於殺死節點 標準回溯模板 回溯演算法,複雜度較高,因為回溯演算法就是暴力窮舉,遍歷整顆決策樹是不可避免的 r...
求子集 全排列
求子集 給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 思路 1 確定乙個tags標記陣列,用於確定某個元素是否被選擇 2 確定遞迴的終止條件為 確定元素是...