人工智慧 農夫過河問題

2021-07-05 18:15:39 字數 1457 閱讀 1800

一農夫帶著一頭狼,乙隻羊和乙個白菜過河,小船只能一次裝載農夫和一樣貨物,狼會吃羊,羊會吃白菜,只有農夫在時才安全。現欲讓所有物品包括農夫都安全過道河對岸,求最佳答案。

用16*4的矩陣:a[16][4],存放每一步的狀態,第一列表示農夫的狀態,第二列表示菜的狀態,第三列表示羊的狀態,第四列表示狐狸的狀態,陣列a裡面的元素只為0或1,0代表在左岸,1代表在右岸。

初始狀態a[0][0]=a[0][1]=a[0][2]=a[0][3]=0,目標狀態是矩陣的某一行全為1。

農夫做往返運動,即第i步中,a[i][0] = i%2。

每次農夫過河,可以選擇帶一件貨物,也可以選擇不帶。

在農夫不在場的情況下,狼和羊不能在一起,羊和白菜不能在一起。

#include 

#include

#include

#include

using

namespace

std;

void search(int i);

int a[16][4];

set s;

int b[16];

string ss[2];

string t[4];

int k;

int level;

int count1(int a)//將當前狀態轉化為10進製數

void show(int a)//顯示結果函式

else

//若不滿足條件則恢復 }}

}void bringnothing(int i)//假設農夫什麼也不帶走

else

b[i]=0;

}void search(int i)//從第i層開始搜尋判斷第i+1層可能的情況

b[i]=-1;

if(i%2==1)//在右岸,先考慮農夫什麼也不帶走

else

}int main()

s.clear();

k=0;

level=0;

s.insert(0); //先將初始狀態儲存起來

search(0); //從第0層開始搜尋

for(int i=0;i<16;i++)

return

0;}

農夫從右邊回左邊,什麼也不帶 左邊:菜 狐狸 右邊:羊

農夫從左邊去右邊,帶上菜 左邊:狐狸 右邊:菜 羊

農夫從右邊回左邊,帶上羊 左邊:羊 狐狸 右邊:菜

農夫從左邊去右邊,帶上狐狸 左邊:羊 右邊:菜 狐狸

農夫從右邊回左邊,什麼也不帶 左邊:羊 右邊:菜 狐狸

農夫從左邊去右邊,帶上羊 左邊: 右邊:菜 羊 狐狸

0 0 0 0

1 0 1 0

0 0 1 0

1 1 1 0

0 1 0 0

1 1 0 1

0 1 0 1

1 1 1 1

農夫過河問題

題目描述 有乙個農夫帶乙隻羊 一筐菜和乙隻狼過河。如果沒有農夫看管,則狼要吃羊,羊要吃菜。但是船很小,只夠農夫帶一樣東西過河。問農夫該如何解此難題?我的 include include include include include include include using namespace s...

農夫過河問題

問題 有一人帶著狼羊菜來到河的左岸欲乘乙隻小船過到右岸,每次人只能帶其中乙個過河 當有人在不會有事 當無人在時 就不允 許狼和羊在一起,也不允許羊和菜在一起,設計演算法以最少的次數過河?採用位向量,4個二進位制位的0 1情況表示狀態,顯而易見,共24 16種可能狀態。從高位到低位分別表示農夫 狼 白...

求解農夫過河問題

問題 乙個農夫帶著一匹狼 乙隻羊 一顆白菜要過河,只有一條船而且農夫每次最多只能帶乙個動物或物品過河,並且當農夫不在的時候狼會吃羊,羊會吃白菜,列出所有安全將所有動物和物品帶過河的方案。思路分析 顯然這不是乙個最優解的問題,最容易想到的方法就是遍歷了,設法用遍歷列舉出所有可能出現的情況,根據條件選取...