2011-05-14 59 views
2

我如何編程解決這種類型的系統:布爾系統(用於C++/C#/ JAVA)

A = !B 
B = !C 
D = !B 
E = !A 
E = !B 

,所以我可以代A = C = D (3)E = B (2)得到。我只需要2組的人數。如果無法獲得2組,我會顯示一條錯誤消息。

+4

相關的(我想說「重複」):?有多少謊言,有多少說實話](http://stackoverflow.com/questions/6000632/whats-the-approach-to-solving - 這種邏輯問題) – 2011-05-14 16:19:28

+0

我沒有看到他的編輯,但我會更多地讚賞這個問題的答案。它還沒有解決:) – 2011-05-14 16:32:08

+0

它不是重複的。這個問題要求提供的基本方法。這個問題更具體,要求實施細節。 – IVlad 2011-05-14 16:36:10

回答

3

在的情況下,這是不是在你前面的問題關閉作爲欺騙,從我answer

爲解決形式的方程

X = NOT X

X = NOT X

形成具有爲X 節點的圖和連接X 和X Ĵ當且僅當方程X = NOT X Ĵ出現。

現在,使用廣度優先搜索嘗試雙色圖。

+0

感謝您的答案。我有圖表的想法,但我放棄了非常快。我仍然認爲我沒有想到。你說的是爲每個方程連接節點Xi和Xj,但最終我得到了一個連通圖 – 2011-05-14 16:58:56

+0

@Dan:太棒了,你會得到一個連通圖。你的問題是什麼? – 2011-05-14 17:01:29

+0

我不明白我怎麼能弄清楚2組是什麼,如果圖完全連接。 (只有2個組的情況) – 2011-05-14 17:03:50

-1

考慮位ABCDE的字符串。對於此字符串的每個subset,該子集中的所有變量設置爲true並沒有在子集false所有的變量。查看哪些子集符合您的條件。

您可以通過二進制計數從02^(num variables) - 1實現這一點。對於每個數字,其二進制表示形式給出了哪些變量是true,哪些是false。所以你只需要得到一個數字的所有位並做檢查。

+0

雖然易於實施,但這是所謂的*暴力*解決方案,通常在學術界內不受歡迎。 – vidstige 2011-05-17 12:36:39