這個是根據網上給的**整理出來的 :
題目:
乙個農夫帶著—只狼、乙隻羊和—棵白菜,身處河的南岸。他要把這些東西全部運到北岸。他面前只有一條小船,船隻能容下他和—件物品,另外只有農夫才能撐船。如果農夫在場,則狼不能吃羊,羊不能吃白菜,否則狼會吃羊,羊會吃白菜,所以農夫不能留下羊和白菜自己離開,也不能留下狼和羊自己離開,而狼不吃白菜。請求出農夫將所有的東西運過河的方案。
理解:
// 巨集定義
#define maxnum 100
// 定義乙個函式指標, 名字叫做datatype
typedef
int datatype;
// 寫結構體的作用是為了把字串和所對應的函式建立一種聯絡, 可以用字串去找到所對應的函式
// 結構體的宣告, 確定結構體裡包含的內容
struct seqqueue ;
typedef
struct seqqueue *pseqqueue;
// pseqqueue是乙個結構體指標 建立了乙個createemptyqueue_seq的函式
pseqqueue createemptyqueue_seq(void) else
return (paqu);
}int isemptyqueue_seq(pseqqueue paqu)
// 是迴圈佇列進隊
// 兩個引數, 乙個是pseqqueue 第二個是datatype
void enqueue_seq(pseqqueue paqu, datatype x) else
}void dequeue_seq(pseqqueue paqu) else
}
// 建立乙個datatype型別的函式指標
datatype frontqueue_seq(pseqqueue paqu)
// 所謂的確定位置, 就像說的, 給乙個坑, 找到對應的位置
// & 後面的數字指的就是4個實物的位置, 用二進位制標示即為
// 農夫 : 1000
// 野狼 : 0100
// 蔬菜 : 0010
// 山羊 : 0001
int farmer(int location)
int wolf(int location)
int cabbage(int location)
int goat(int location)
// 定義乙個函式, 根據位置判斷三者的安全問題, 如果不安全返回的是0, 如果安全則返回1
int safe(int location)
if ((goat(location) == wolf(location)) && (goat(location) != farmer(location)))
return (1);
}
// 建立乙個無返回值, 無引數的函式
void framerriverproblem()
route[0] = 0;
//!isemptyqueue_seq(moveto)
"/" && (route[15] == -1) "/": 類似斷句的方式, 將過程斷開
while (!isemptyqueue_seq(moveto) && (route[15] == -1)) }}
}//判斷最後乙個元素是不是與我們賦值的-1是相等的
if (route[15] != -1)
}} else
}
《演算法與資料結構 C語言描述》裡的農夫過河
題目 乙個農夫帶著乙隻狼,乙隻羊和一些菜過河。河邊只有一條船,由於船太小,只能裝下農夫和他的一樣東西。在無人看管的情況下,狼要吃羊,羊要吃菜,請問農夫如何才能使三樣東西平安過河。演算法的實質 在滿足一定條件下的,所有狀態的遍歷。滿足的條件 1.每次農夫必須移動 2.農夫移動的東西與農夫必須在同一岸,...
農夫過河 資料結構實驗報告
資料結構實驗報告 實驗名稱 實驗三 農夫過河 學號 姓名 gnosed 實驗日期 2017.10.30 一 實驗目的 1 進一步掌握佇列的使用 2 會使用佇列進行農夫過河解的搜尋 二 實驗具體內容 1 實驗題目1 1 題目 經典的農夫過河問題 乙個農夫帶著乙隻狼,乙隻羊和一顆白菜過河,從西岸到東岸。...
C語言資料結構之FIFO
fifo first in first out 插入在表的一端進行,而刪除在表的另一端進行,我們將這種資料結構稱為隊或者佇列 就像排隊一樣,排在前面的先出,很形象 允許插入的一端稱為隊尾 rear 允許刪除的一端稱為 front 通常我們用得較多的是迴圈佇列 也就是當rear達到fifo的最大值後又...