过河问题,C++(非搜索算法实现)

本文介绍了如何使用C++编程解决经典的农夫过河问题,该问题涉及狼、羊和白菜,每次小船只能载一人一物。通过判断农夫状态和物品携带情况,模拟避免狼吃羊、羊吃白菜的情况,直至所有物品过河。
摘要由CSDN通过智能技术生成

问题描述:农夫带着狼, 羊, 白菜过河,如果农夫没有在旁边看着它们, 狼就会吃羊, 羊会吃白菜,
但是小船一次只能载一人一物。
主要过程:

  • 判断农夫状态 -> 决定去右岸还是回左岸
  • 去右岸 -> 带哪一件物品(先判断这件物品是不是我刚带回来的!)
    带哪一件物品 -> 模拟带走以后,会不会相互伤害 -> 不相互伤害则带走(相互伤害则跳过)
  • 回左岸 -> 若独自一人回去后不出现相互伤害,则独自一人回 (若相互伤害则带走一件物品)
  • 每过一次河,判断是否运完了!!
#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 <
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值