農夫過河 資料結構 之C語言

2021-07-09 12:06:21 字數 1957 閱讀 9166

這個是根據網上給的**整理出來的 :

題目:

乙個農夫帶著—只狼、乙隻羊和—棵白菜,身處河的南岸。他要把這些東西全部運到北岸。他面前只有一條小船,船隻能容下他和—件物品,另外只有農夫才能撐船。如果農夫在場,則狼不能吃羊,羊不能吃白菜,否則狼會吃羊,羊會吃白菜,所以農夫不能留下羊和白菜自己離開,也不能留下狼和羊自己離開,而狼不吃白菜。請求出農夫將所有的東西運過河的方案。

理解:

// 巨集定義

#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的最大值後又...