非空子集的生成(二進位制法)

2021-10-05 02:27:26 字數 540 閱讀 2001

假如有乙個n個元素的集合,那麼它的非空子集有2的次方-1個,而乙個n位的二進位制數除去0剛好可以表示2的n次方-1種狀態。剛好可以建立對應的聯絡,因此只需要檢測二進位制數所表示的每一種狀態1的位置,把對應位置的角標對應的元素新增到集合中即可(一種狀態對應乙個集合),最後在把集合新增到容器中便可求出所有的非空子集。

**實現:

#include

#include

#include

#include

using

namespace std;

const

int max=5;

vectorint>>all;

int a[max]=;

intmain()

all.

push_back

(s);

//將集合新增到容器中

}//遍歷所有非空子集

for(

int i=

0;i)return0;

}

C 二進位制法生成子集

乙個有 n 個元素的集合 n 0,n為整數 可以生成 2 n個子集。例如 可以生成4個子集 二進位制法就是 從0到 2 n用二進位制表示,為1的對應的陣列位置元素 納入子集集合。例如 a 有 16 個子集,建立如下表 十進位制數 二進位制數 1對應的陣列元素 結果集0 0000空1 0001 a 3...

技巧 二進位制法列舉子集

我們來看乙個可以用二進位制列舉的方法解決的題目 話說大詩人李白,一生好飲 幸好他從不開車 一天,他提著酒壺,從家裡出來,酒壺中有酒兩斗 他邊走邊唱 無事街上走,提壺去打酒 逢店加一倍,遇花喝一斗 這一路上,他一共遇到店 5 次,遇到花 10 次,已知最後一次遇到的是花,他正好把酒喝光了 請你計算李白...

二進位制子集生成

之前看 演算法競賽入門經典 這本書,看到了子集生成部分,以為自己沒有看二進位制法。誰知整理部落格的時候發現很早之前就學習過了,然而我描述的不完整,看了半天沒看懂什麼意思,果然欠下的都是要還的。用二進位制表示子集,其中從右往左第i位 從0開始編號 表示元素i是否在集合中。在集合表示法中,1 i 表示第...