/** 農夫過河問題
* * 大家有沒有看過我的c學習中的位算,我們用8位二進位制的數字來表示任務的完成與否,1完成、0未完成
* 現在我們用4個二進位制數來代表
* 第一位表示農夫(1:北岸,0:南岸)
* 第二位表示狼 (1:北岸,0:南岸)
* 第三位表示?? (1:北岸,0:南岸)
* 第四位表示白菜(1:北岸,0:南岸)
* 我們怎麼判斷農夫在哪(是不是把當前狀態與1000進行 & 操作,為1就在北岸,為0 就在南岸)
* 那麼判斷安全(羊的位置不等於狼,羊位置不等於白菜,且兩個狀態可以存在的是農夫在)
* 那麼接下去我們來進行廣度優先的遍歷,當滿足條件時,我們就把新的狀態push進佇列中去
* 且我們要記錄路徑,所以需要乙個並查集陣列,0-15即可
* */
#include #include #include "sqqueue.h"
#define bit(x) (1<#include using namespace std;
//第一位農夫。第二位狼。第三位白菜,第四位白菜
enum status;
//farmer的位置
int farmer(int location)
//wolf的位置
int wolf(int location)
//goat的位置
int goat(int location)
//cabbage的位置
int cabbage(int location)
int issafe(int location)
void farmer_location(int location)else
}void farmer_acrry(int currstatus, int afteratatus)
}void farmer_cross_river()
int location; //int正好是4個位元組
q.push(0);
arr[0] = 0; //第乙個狀態是預設的
int newlocation; //新的位置情況
// visited[0] = true;
while( (!q.isempty()) && (arr[15] == -1))
}} //for end
} //while end
//// for(int i = 0; i < 16; i++)
//現在從1111的位置通過並查集來推到0000的位置來推出路徑
int res[16] = ;
int counter = 0;
if(arr[15] == -1)else
//列印一下狀態
for(int i = 0; i < counter; i++)
for(int i = 0; i < counter; i++)
}}int main()
農夫過河問題
題目描述 有乙個農夫帶乙隻羊 一筐菜和乙隻狼過河。如果沒有農夫看管,則狼要吃羊,羊要吃菜。但是船很小,只夠農夫帶一樣東西過河。問農夫該如何解此難題?我的 include include include include include include include using namespace s...
農夫過河問題
問題 有一人帶著狼羊菜來到河的左岸欲乘乙隻小船過到右岸,每次人只能帶其中乙個過河 當有人在不會有事 當無人在時 就不允 許狼和羊在一起,也不允許羊和菜在一起,設計演算法以最少的次數過河?採用位向量,4個二進位制位的0 1情況表示狀態,顯而易見,共24 16種可能狀態。從高位到低位分別表示農夫 狼 白...
c實現農夫過河問題
問題描述 乙個農夫帶著乙隻狼 乙隻羊和一棵白菜,身處河的南岸。他要把這些東西全部運到北岸。問題是他面前只有一條小船,船小到只能容下他和一件物品,另外只有農夫能撐船。另外,因為狼能吃羊,而羊愛吃白菜,所以農夫不能留下羊和白菜或者狼和羊單獨在河的一邊,自己離開。請問農夫該採取什麼方案才能將所有的東西運過...