農民過河問題是指農民需要帶乙隻狼、乙隻羊和一棵白菜到河的南岸去,需要安全運到北岸。而一條小船只能容下他和一件物品,只有農民能撐船。問農民怎麼能安全過河,問題中需要涉及到狼會吃羊,羊會吃白菜,所以農民不能將這兩種或三種物品單獨放在河的一側,因為沒有農民的照看,狼就要吃掉羊,而羊可能又要吃掉白菜。 這類問題的實質是系統的狀態問題,要尋求的是從初始狀態經一系列的安全狀態到達系統的終止狀態的一條路徑。根據實際情況,對此問題分析可以得到不同的特徵:一是農民和羊在河的南岸,狼和白菜在河的北岸;二是從乙個狀態可轉到另外乙個狀態,而不違反狼吃羊,羊吃草的規則(例如農民自己過河或者農民帶著羊過河);三是有些狀態是不安全的(例如農民一人在北岸,而其他的東西都在南岸);四是初始狀態是農民,羊,狼,白菜都在河的南岸和結束狀態是農民,羊,狼,白菜都在河的北岸。**很簡單思路也很簡單…就水一篇…實現農民過河問題,則需要找到一條合法的路徑(相鄰狀態之間的轉移合法),從開始狀態到某個結束狀態,路途中不能經過不安全的狀態。
二、 實驗目的概述(總體設計方案)
a ) 利用圖的有關知識來解決農民過河問題
b ) 根據圖的廣度(深度)優先搜尋來實現實驗要求
在實施此問題中,首先要為農民,狼,白菜和羊設定求狀態的函式,若某一種物品在河的南岸,則返回0,若在河的的北岸,則返回1;其次是為每一種狀態做測試,狀態安全則返1,否則返回0。
(**因為課設的好看一點就盡量拉長了長度…還有要改進的地方,有空再水)
//解題思路
/* 一條船,載重為二,因為農夫要划船,所以不管怎麼樣農夫始終要在船上往返於南北岸。農夫要過河,單獨把狼和羊放一起狼會吃羊;單獨把羊和白菜放一起,羊會吃白菜。所以,狼和白菜是一對的安全判斷點。第一次把羊運到河對岸,農夫回到原點,帶走白菜(狼)運到河對岸,回原點的時候帶上羊,再去河對岸的時候把狼(白菜),又湊成安全條件,最後再返回原點把羊接回來。羊作為中間物,吃白菜,又被狼吃,所以它是題目的平衡點,它要麼單獨存在,要麼和農夫在一起,這就是完成題目的判斷合法狀態的關鍵。
*/#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
int farmer =
0, sheep =
0, wolf =
0, cabbage =
0, safety =1;
void
dfs()if
(farmer == sheep ||
(sheep != cabbage && sheep != wolf)
)//如果羊和農夫在一起或者羊單獨存在,就表示狀態安全
safety =1;
else
if(safety)
//把狼帶到北岸
else
if(wolf ==0)
//把白菜帶到北岸
else
if(cabbage ==0)
}else
if(farmer ==1)
else
//把狼運回南岸
else
if(wolf ==1)
//把白菜運回南岸
else
if(cabbage ==1)
}}}}
intmain()
資料結構課程設計
資料結構課程設計 include define n 30 include include includeusing namespace std struct node typedef node phone,mingzi node hashnumble node hashname int hash1 ...
資料結構課程設計
小明是乙個計算機專業top student 祝賀他畢業了。並準備到銀行參加工作。上班第一天,經理叫他編制乙個實現乙個活期儲蓄處理程式,算作考查。上班第一天,一定要給領導乙個好印象,小明二話沒說,就答應了。現要你是小明了,請完成如下題目功能。儲戶開戶 銷戶 存入 支出活動頻繁,系統設計要求 1 能比較...
資料結構課程設計
一 實訓目的 通過課程設計,學會運用資料結構知識,針對具體應用,自己設計合理資料結構,確定儲存結構,並能設計具體操作演算法,選擇使用具體語言進行實現。掌握c 較複雜程式的組織和設計過程,除錯技巧。學習解決實際問題的能力。題目1.小明是乙個計算機專業top student,祝賀他畢業了。並準備到銀行參...