農夫過河的四種解法

2021-08-31 13:00:21 字數 879 閱讀 1847

/*

* 題目描述:有乙個農夫,帶著乙隻狼、乙隻羊、一顆白菜過河。其中農夫不在的時候狼會吃羊,

* 羊會吃白菜。只有乙隻船,且每次農夫最多只能帶一樣物品過河。求解決方案。

* * 思路:1. 過程回溯法。把人、狼、羊、白菜看成a、b、c、d。過河的時候從abcd中選兩個過河,在

* 選乙個回來。若發生狼跟羊、羊跟白菜在同乙個岸邊,且農夫不在場,則回溯.

* * 2. 圖的遍歷。設從南岸到北岸,在南岸abcd的各個狀態是(用二進位制表示):0000,在

* 北岸的時候各個狀態是:1111。所以過河問題就是從0000起始狀態到1111最終狀態的

* 過程。易得,總共有16中狀態。然後把每一種狀態看成圖的乙個結點,把可以連通的

* 結點用有向邊連起來,就構成的乙個有向圖。從0000這個結點遍歷(深度優先或者廣

* 度優先)圖,遍歷到1111結點則找到解。

* * 3. 狀態回溯法。設從南岸到北岸,在南岸abcd的各個狀態是(用二進位制表示):0000,在

* 北岸的時候各個狀態是:1111。所以過河問題就是從0000起始狀態到1111最終狀態的

* 過程。易得,總共有16中狀態。從第一種狀態0000開始搜尋,搜尋當前狀態下可以到達的

* 的狀態或已遍歷所有搜尋出來的狀態,則回溯。直到到達1111狀態。

*

* 4. 狀態佇列搜尋法。跟思路3類似,只是搜尋的方式不一樣。思路3中用棧的思想進行深度搜尋

* 這裡採用佇列的思想進行廣度搜尋。

*/

相同的樹 四種解法

給定兩個二叉樹,編寫乙個函式來檢驗它們是否相同。如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。遞迴解法 遞迴解法 param p param q return public boolean issametree treenode p,treenode q else 非遞迴前序遍歷...

最短路徑四種解法

在學習 圖 的時候,遇到過一道經典的題 最短路徑。最短路徑有四種最經典的解法。廢話不多說,直接上 floyd warshall include using namespace std const int m 999999 int n,m,p1,p2,l int map 1000 1000 intma...

旋轉陣列的四種解法

示例 輸入 1,2,3,4,5,6,7 和 k 3 輸出 5,6,7,1,2,3,4 解釋 向右旋轉 1 步 7,1,2,3,4,5,6 向右旋轉 2 步 6,7,1,2,3,4,5 向右旋轉 3 步 5,6,7,1,2,3,4 環狀替換法,即從起點開始,每次以k為單位進行跳躍式的替換,每個元素都會...