1樓:Aloys寒風
這種問題prolog比較合適,記得當時就練過這道題。
% 農夫問題求解
% 使用乙個1×4的波爾向量來表示狼,羊,菜,農夫的狀態
% 第乙個元素代表狼,第二個羊,第三個菜,第四個農夫。
% 元素等於0時表示對應的物件在彼岸,等於1時,表示對應的物件在此岸。
% 呼叫方法 across([1,1,1,1], , State).v(
0).%在彼岸v(
1).%在此岸
move
(OldState
,NewState):-
[A1,B1
,C1,D1
]=OldState,v
(A1),v
(B1),v
(C1),v
(D1),D1==1
,% 農夫在此岸[A2
,B2,C2
,D2]=
NewState,v
(A2),v
(B2),v
(C2),v
(D2),D2==0
,% 農夫在彼岸A2+
B2=\=2,
% 狼和羊不能都留在此岸B2+
C2=\=2,
% 羊和菜不能都留在此岸A1-
A2>=0,
% 狼可以在此岸也可以去彼岸B1-
B2>=0,
% 羊可以在此岸也可以去彼岸C1-
C2>=0,
% 菜可以在此岸也可以去彼岸
sum_list
(OldState
,OldSum
),% 預置函式,列表求和
sum_list
(NewState
,NewSum
),NewSum
=:=OldSum-2.
move
(OldState
,NewState):-
[A1,B1
,C1,D1
]=OldState,v
(A1),v
(B1),v
(C1),v
(D1),D1==0
,% 農夫在彼岸[A2
,B2,C2
,D2]=
NewState,v
(A2),v
(B2),v
(C2),v
(D2),D2==1
,% 農夫在此岸A2+
B2=\=0,
% 狼和羊不能都留在彼岸B2+
C2=\=0,
% 羊和菜不能都留在彼岸A1-
A2=<0,
% 狼可以在彼岸也可以來此岸B1-
B2=<0,
% 羊可以在彼岸也可以來此岸C1-
C2=<0,
% 菜可以在彼岸也可以來此岸
sum_list
(OldState
,OldSum
),sum_list
(NewState
,NewSum
),NewSum
>=OldSum+1
,NewSum
= across([0 ,0,0 ,0],Visited ,Result):- Result=[[ 0,0, 0,0]]. across (OldState ,Visited ,Result):- move (OldState ,NewState ),\+ member (NewState ,Visited ),% 預置函式,判斷前者是否是後者成員 across (NewState,[ NewState |Visited ],NewStateResult ),Result=[ OldState |NewStateResult ].結果: Result = [[1,1,1,1],[1,0,1,0],[1,0,1,1],[0,0,1,0],[0,1,1,1],[0,1,0,0],[0,1,0,1],[0,0,0,0]] ? ; Result = [[1,1,1,1],[1,0,1,0],[1,0,1,1],[1,0,0,0],[1,1,0,1],[0,1,0,0],[0,1,0,1],[0,0,0,0]] ? ; 2樓:鄭啟威 首先,有四樣「貨物」,人,狼,羊,白菜。因此在左岸,可能有16種狀態,我們可以用乙個二進位制數來表示,比如 1111b表示都在左岸,0110b 表示狼和羊在左岸。顯然當左岸為sate時,右岸為15-state(如果在船上,我們也算在右岸)。 這裡要明確狀態的意義。 下面就是構造狀態轉移矩陣。 在這一步,我們要弄清楚乙個狀態,可能變為哪些狀態。如果兩個狀態可以互相轉換,我們就將矩陣對應的位置設為1。 先考慮人不在左岸,也就是state<8的情況,下一時刻,可能有哪些狀態呢? 顯然下一時刻,必然是船從右側過來,船上有人,還可能有另外乙個在右岸的貨物。 注意我們可以只考慮左岸沒有人的狀態,因為左岸與右岸是相反的。 #define HUMAN_BIT 8 #define WOLF_BIT 4 #define SHEEP_BIT 2 #define CABBAGE_BIT 1 #define HUMAN(state) ((state) & HUMAN_BIT) #define WOLF(state) ((state) & WOLF_BIT) #define SHEEP(state) ((state) & SHEEP_BIT) #define CABBAGE(state) ((state) & CABBAGE_BIT) intmatrix[16 ][16]= ;void CreateStateTransitionMatrix()} 這實際上就是乙個圖的鄰接矩陣,每個狀態就是圖的乙個結點。我們可以畫出來看看 H表示人 W為狼 S為羊 C為白菜。均表示左岸的狀態。 比如人帶著羊過河,那麼就由 H W S C變為 W C. 但是要注意,因為狼不能和羊在一起,羊不能和白菜在一起,也就是說 0110 0011 0111以及它們的補數,是無效的狀態,是不能達到的,因此要把這些狀態去掉。 void RemoveOneInvalidState (int state)} void RemoveInvalidState ()此時的鄰接矩陣為 現在的問題就是找一條路徑從 H W S C 到 NULL。這就是乙個圖的搜尋問題了。 3樓:陳碩 Mandy Leung 首先,只想通過暴力解決問題的人,都是思想比較直接較真的,因為嘴皮子鬥不過別人,因而用拳頭,證明情商太低。再者,如果使用暴力是對於弱者,那就就是人品有問題了。 高頭頭 1.他們認為暴力可以解決問題 2.他們不認為溝通可以解決問題 3.雞毛蒜皮之事卻使用暴力解決是反常的 4.如何... 已登出 解決不了,但還是嘗試解決一下。假設你的室友都是懶狗且無所謂寢室是否乾淨。而你又是個正常人,不想寢室髒。那麼博弈矩陣就是這樣的 室友行為 打掃不打掃 你的行為 打掃4,40,8 不打掃8,54,1 括號中前乙個數字代表你的感覺,後乙個數字代表室友的感覺,可以看出你打掃室友不打掃的時候達到了納什... DOGDOGDOG 我的方法比較直接,我做事之前會先想幾種方案,如果還是遇到了突發狀況的話,如下 第一步,快速想一下這個問題最糟會對我有什麼影響?第二步,我期望得到怎樣的結果 第三步,用最短的時間辦最重要的事,分清楚拿件事最急最重要,先解決了,其次一些無關緊要的在時間充分的情況下可以完成 第四步,看...如何看待男生通過暴力解決人際交往問題?
如何用博弈論來解決寢室衛生問題?
如何用高效思考模式來解決遇到的問題?