2 SAT演算法(未完)

2022-06-01 10:57:10 字數 599 閱讀 7788

例題:

演算法:演算法所求問題:

這個演算法主要是求有n個人,每個有m個要求,要求只可能是1或0的情況(及是或不是,要或不要......),且每個要求只需滿足其一即可,求是否有可行的分配方案(當然,也可以求出那個可行的分配方案)

演算法前置知識:

tarjan求強連通分量,拓撲序

演算法主要思路:

如何求出能否有一種方案使得所有人的條件滿足其一

首先宣告一下:a --> b(a向b連一條邊)表示如果慢足a這個條件,就必須滿足b這個條件;a本身表示選a,a + n表示不選a。開始說思路:如果有乙個要求是選a或者不選b,那麼我們可以從a + n向b + n連一條邊(如果不選a了,就必須不選b,否則就不滿足這個要求了),然後我們也從b向a連一條邊(如果選b了,就必須選a,否則就不滿足要求了)。建完圖之後,我們可以用tarjan求強連通分量,如果有乙個逆條件(即不能選a)和正條件(即選a)在同乙個強連通分量裡,那麼這幾個條件就無法同時滿足;反之則一定可以。

如何求出這個方案是什麼(在求出有方案的情況下)

這個需要用到拓撲序(即當前點是第幾個被搜到的),例如:如果有乙個點a它的選連著它的不選,那麼就代表選a的選就必須選a的不選(就衝突了),所以我們只能選a的不選

模板 2 SAT 問題 2 SAT

2 sat 問題 模板 有n個布林變數 x 1 x n 另有m個需要滿足的條件,每個條件的形式都是 x i 為true false或 x j 為true false 比如 x 1 為真或 x 3 為假 x 7 為假或 x 2 為假 2 sat 問題的目標是給每個變數賦值使得所有條件得到滿足。輸入格式...

2 SAT問題及其演算法

2 sat問題 現有乙個由n個布林值組成的序列a,給出一些限制關係,比如a x and a y 0 a x or a y or a z 1等,要確定a 0.n 1 的值,使得其滿足所有限制關係。這個稱為sat問題,特別的,若每種限制關係中最多隻對兩個元素進行限制,則稱 為2 sat問題。由於在2 s...

2 SAT問題的演算法

求解2 sat問題的演算法有很多,有一種效率還不錯,實現方便又理解方便的演算法。注意例子中的那個條件 x1為假或x2為真 在x1為假的時候x2可以為任意值,但在x1為真的時候,x2為滿足條件必須是真。也就是說x1為真可以推導出x2為假 x2為假可以推導出x1為真。換成一般的情況,已知xa xb 則x...