《演算法與資料結構 C語言描述》裡的農夫過河

2021-07-26 07:07:44 字數 2161 閱讀 3109

題目:

乙個農夫帶著乙隻狼,乙隻羊和一些菜過河。河邊只有一條船,由於船太小,只能裝下農夫和他的一樣東西。在無人看管的情況下,狼要吃羊,羊要吃菜,請問農夫如何才能使三樣東西平安過河。

演算法的實質:

在滿足一定條件下的,所有狀態的遍歷。

滿足的條件:

1.每次農夫必須移動

2.農夫移動的東西與農夫必須在同一岸,但農夫可不帶東西獨自移動

3.此種狀態,必須在以往從來沒有出現過

基本思路:

以4位二進位制分別表達農夫,狠,菜,羊的狀態,1表示在北岸,0表示在南岸。使用佇列廣度優先遍歷所有狀態,並記下遍歷的可用順序(重複遍歷被除去)

1.佇列**

#pragma once

/** max-1 容量的佇列

*/template

class queue

~queue(void){}

bool full()

return

false;

}bool pushback( data data)

m_data[m_ntail] = data;

m_ntail = (m_ntail+1)%max;

return

true;

}bool empty()

return

false;

}data* getfront()

return null;

}private:

data m_data[max];

int m_nfront;

int m_ntail;

};

2.農夫過河

1

//0表示在南岸,1表示在北岸

2 #include "

string.h"3

//按照 農夫,狼,白菜,羊的順序,排列在乙個int中

4int farmer(int location)5 8

int wolf(int location)

9 12

int cabbage(int location)

13 16

int goat( int location)

17 20

bool safe(int location)

21 25

if(cabbage(location)== goat((location)) && goat(location) != farmer(location))

28return

true;

29 }

30int printresult(int* rout, int len);

31void farmerproblem()

32 58 }

59 }

60if (!b)

61

70 }

71 }

72//

printresult(rout,sizeof(rout)/sizeof(int));

73 }

74int printresult(int* rout, int len)

75 83

else

8687

if(wolf(rout[i]) )

90else

9394

if(cabbage(rout[i]) )

97else

100101

if(goat(rout[i]) )

104else

107108 printf("

\n\n

");109 }

110return

0;111 }

// queue.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include "queue.h"

#include #include "farmer.h"

int _tmain(int argc, _tchar* argv)

資料結構與演算法分析 C語言描述

第一種方法,先進行排序,再返回位置k上的元素。簡單排序問題 第二種方法,先將前k個元素讀入,再將剩下的元素逐個讀入,如果新元素大於陣列中第k個元素就找到他合適的位置並將陣列中的乙個元素擠出。第三種方法,利用快排的特點 假設預設公升序排序 每一次快排操作都能確定乙個數在排序結果中的最終固定位置,即該位...

資料結構與演算法分析 c 語言描述

編寫帶有下列宣告的兩個例程 void permute string str void permute char str,int low,int high 第乙個例程是個驅動程式,它呼叫第二個例程並顯示string str中字元的所有排列。例如,str是 abc 那麼輸出的串則是abc,acb,bac...

《資料結構與演算法分析(C 語言描述)》

第1章 uml教程 更多軟體恐怖故事 nist新聞稿 軟體錯誤每年給美國經濟造成595億美元的損失 nist報告本身 pdf 第2章 ieee對實數的反感 c 的按位運算子 第3章 工會 記憶體結構 第5章模式匹配 資料加密 第9章用位集實現集 有關valarrays的更多資訊 第10章 用於解析表...