问题描述:农夫带着狼, 羊, 白菜过河,如果农夫没有在旁边看着它们, 狼就会吃羊, 羊会吃白菜,
但是小船一次只能载一人一物。
主要过程:
- 判断农夫状态 -> 决定去右岸还是回左岸
- 去右岸 -> 带哪一件物品(先判断这件物品是不是我刚带回来的!)
带哪一件物品 -> 模拟带走以后,会不会相互伤害 -> 不相互伤害则带走(相互伤害则跳过) - 回左岸 -> 若独自一人回去后不出现相互伤害,则独自一人回 (若相互伤害则带走一件物品)
- 每过一次河,判断是否运完了!!
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
//bool变量 farmer和数组article[3] 表示农夫和他的狼、羊、白菜的在河的左边还是右边,true为左岸,false为右岸
bool farmer = true;
bool article[3] = {
true,true,true };
//string数组,表示数组article中三个变量对应的名称
string name[3] = {
"灰太狼","懒羊羊","大白菜"};
//记录农夫本次开船载的物品是什么(编号),第一次没有载过,初始化为3,不在数组编号中!
int temp = 3;
cout << "--------------下面模拟过程开始--------------" << endl;
//一直载循环渡河中,直至所有物品都载到了河的右岸
//其中每次循环,通过判断农夫的状态,确定这次行为是 过河的右岸,还是 回河的左岸
while (true)
{
//农夫状态为true,在左岸,则本次行为是 过河的右岸,循环判断3件物品,确定载哪一件物品过河
if (farmer <