蠻力法求解冪集問題

2021-09-27 08:55:31 字數 1220 閱讀 9791

對於給定的正整數n(n>=1),求1到n構成的集合的冪集(包括全集和空集)

思路將二進位制位與冪集對應起來,n的冪集個數為2

n2^n

2n,每乙個二進位制位代表乙個元素。下面以n等於3為例。

集合元素

對應的二進位制位

對應的十進位制數

000-

0011

0102

0113

1004

1015

1106

1117

演算法複雜度: o(n

∗2n)

o(n*2^n)

o(n∗2n

) 實現

#include

using namespace std;

/* alogorithm design

蠻力法

1.直接列舉法求解冪集問題

*/// 將b表示的二進位制加1

// b陣列下表從小到大對應從低到高位

intinc

(int b,

int n)}}

void

pset

(int a,

int b,

int n)

cout <<

"}";

inc(b,n);}

cout << endl;

}int

main()

pset

(a,b,n)

;return0;

}

思路

從最初的空集開始,往裡面加第乙個元素,將得到的子冪集與原來的冪集合並,就得到了新的子冪集,然後再重複以上操作。

演算法複雜度: o(2

n)

o(2^n)

o(2n)

實現

#include

using namespace std;

vectorint>

> pset;

// 全域性變數 存放冪集

void

psetsolve

(int n)

for(pit=tmp.

begin()

;pit!=tmp.

end(

);pit++)}

}// 列印冪集

void

disp

(int n)";

}}intmain()

蠻力法求解「獄吏問題」

問題描述 獄吏問題 某國王對囚犯進行大赦,讓一獄吏n次通過一排鎖著的n間牢房,每通過一次按所定規則轉動n間牢房中的某些門鎖,每轉動一次原來鎖著的被開啟,原來開啟的被 鎖上通過n次後,門鎖開著的,牢房中的犯人被放出,否則,犯人不得釋放。轉動門鎖的規則是這樣的,第一次通過牢房,從第一間開始轉動每一把鎖,...

蠻力法求解0 1揹包問題C

先佔坑 include include 以下三個庫用於計算程式運算時間 include include include using namespace std define n 100 struct goods int n,bestvalue,cv,cw,c 物品數量,價值最大,當前價值,當前重量,...

蠻力法 求解迷宮問題 DFS和BFS

問題描述 有如圖8 8的迷宮 o x ooooo xoxxooox xoxxoxxo xo xooooxoo xo 其中,o表示通路方塊,x表示障礙方塊。假設入口位置為 0,0 出口為右下角方塊位置 7,7 設計乙個程式求指定入口到出口的一條迷宮路徑。分析 用n表示迷宮大小,用二維陣列maze存放迷...