理論知識了解https://www.cnblogs.com/6dan_hust/archive/2010/08/23/1806560.html
有一農夫帶一只狼、一只羊和一筐菜欲從河的左岸乘船到右岸,但受下列條件限制:
(1)船太小,農夫每次只能帶一樣東西過河;
(2)如果沒有農夫看管,則狼要吃羊,羊要吃菜。
請用狀態空間法設計一個過河方案,使得農夫、狼、羊、菜都能不受損失地過河。畫出相應的狀態空間圖。
提示:
(1)用四元組(農夫、狼、羊、菜)表示狀態,其中每個元素都可為0或1,用0表示在左岸,用1表示在右岸。
(2)把每次過河的一種安排作為一個算符,每次過河都必須有農夫,因為只有他可以划船。
解:狀態用四元組表示為S(P,W,G,V),其中P為農民,W為狼,G為羊,V為菜,B為船,B=0為船在左岸,1為船在右岸。初始狀態為S0=(0,0,0,0),目標狀態為Sg=(1,1,1,1)。
安全規則:
1)不能將G與W單獨留在對岸: not(W==G and P!=W);
2)不能單獨將G與V留在對岸:not(G==V and G!=P)
操作算符定義為:
P(S)僅農夫過河:if (安全) then {P(S),得到一個新狀態(1-P,W,G,V)}; PG(S):農夫帶羊過河:if (安全) then {PG(S),得到一個新狀態(1-P,W,1-G,V)}; PW(S):農夫帶狼過河:if (安全) then {PW(S),得到一個新狀態(1-P,1-W,G,V)}; PV(S):農夫帶菜過河:if(安全)then {PV(S),得到一個新狀態(1-P,W,G,1-V)}。
解:
①分析狀態
因為以S(P,W,G,V)的形式且P,W,G,V只有0,1兩種取值,所以有2*2*2*2種狀態
狀態 | (P,W,G,V) | 狀態 | (P,W,G,V) | 狀態 | (P,W,G,V) | 狀態 | (P,W,G,V) |
S1 | (0,0,0,0) | S5 | (0,1,0,0) | S9 | (1,0,0,0) | S13 | (1,1,0,0) |
S2 | (0,0,0,1) | S6 | (0,1,0,1) | S10 | (1,0,0,1) | S14 | (1,1,0,1) |
S3 | (0,0,1,0) | S7 | (0,1,1,0) | S11 | (1,0,1,0) | S15 | (1,1,1,0) |
S4 | (0,0,1,1) | S8 | (0,1,1,1) | S12 | (1,0,1,1) | S16 | (1,1,1,1) |
要求是從S1轉換到S16。
②去掉不滿足條件的狀態
- 左岸,農民不在,狼羊,羊菜不能在一起,即(1,0,0,*),(1,*,0,0)
- 右岸,農民不在,狼羊,羊菜不能在一起,即(0,1,1,*),(0,*,1,1)
③繪制狀態圖