狼 羊 渔夫过河问题

2023-11-05

这几天碰到一个有意思的程序,讲的是狼 羊 白菜船夫要过河(从南岸到北岸), 结果每次船只能载船夫和一个东西 ,而且如果船夫不在场的话,狼会偷偷吃掉羊 ,羊会偷偷吃掉白菜 ,自己写一个算法求出可行的方案。。。

首先我的想法是 ,用四个位表示这四个 ,然后位为0表示在南岸,1表示在北岸。

先定义

const int man=8; //1000
const int wolf=4; //0100
const int sheep=2; //0010
const int cabbage=1; //0001
const int origon=0;//0000 means all are on south
const int ok=15;//1111 means all are on north

可以见到,过河时和返回时,能够带的东西,他们的表示方法不一样,比如过河是,位为0的才能过河变成1,同样,返回的时候,位为1的才能变成0,所以还要定义一个标志    1表示过河  0表示返回。

static bool flag=1;

这样我们用一个数字,就能表示出所有事物的状态。题目中给出,狼羊,羊白菜不能一起,不能一起的情况共有四种,南岸北岸,分别是0011(3),1100(12),0110(6),1001(9)

,因为错误情况比较少,我就不使用数组了,直接在预判情况时比较好了。

到现在,我们有了一个筛选条件,就是当前状态不能等与上述四种情况,同时为了避免船夫来回空跑,或者狼羊在两岸,船夫带着白菜来回不停的跑,我还添加一个筛选条件就是状态不能重复,所以添加了一个数组states[]来保存已经经历的状态。

static int *states=new int[10]{222};

由于还要向数组写入,所以定义一个写指针

static int *p=states;

.这时候开始写函数,一共有三个函数,moveto函数输入当期状态和标志,moveto函数通过调用search函数挨个试一下可能出现的情况是否符合标准,如何返回状态,不符合返回-1。

searc函数接受当前状态以及要过河的东西,测试过河侯是否是错误情况以及过河后是否出现重复状态,如果可以过河,输出当前过河的东西以及是过河还是回来。

find函数调用moveto实现过河。

 

源码及附件如下



#include <iostream>
using namespace std;
const int man=8; //1000
const int wolf=4; //0100
const int sheep=2; //0010
const int cabbage=1; //0001
const int origon=0;//0000 means all are on south
const int ok=15;//1111 means all are on north
static bool flag=1;
static int *states=new int[10]{222};
static int *p=states;
int moveto(int ,int , bool);
int find(int ,int , bool);
int search(int );

int moveto(int nowstate, int x,bool flag)
{
if(flag)
{

x=nowstate|8|1;
if(search(x)!=-1)
{
cout<<“白菜”<<“过河”<<endl;
return x;
}
x=nowstate|8|2;
if(search(x)!=-1)
{
cout<<“羊”<<“过河”<<endl;
return x;
}
x=nowstate|8|4;
if(search(x)!=-1)
{
cout<<“狼”<<“过河”<<endl;
return x;
}
x=nowstate|8;
if(search(x)!=-1)
{
cout<<“只有船夫”<<“过河”<<endl;
return x;
}
} else{

x=nowstate&7&14;
if(search(x)!=-1)
{
cout<<(nowstate-x==8?”农夫”:(nowstate-x==9?”农夫白菜”:(nowstate-x==10?”农夫羊”:”农夫狼”)))<<“回来”<<endl;
return x;
}
x=nowstate&7&13;
if(search(x)!=-1)
{
cout<<(nowstate-x==8?”农夫”:(nowstate-x==9?”农夫白菜”:(nowstate-x==10?”农夫羊”:”农夫狼”)))<<“回来”<<endl;

return x;
}
x=nowstate&7&9;
if(search(x)!=-1)
{
cout<<(nowstate-x==8?”农夫”:(nowstate-x==9?”农夫白菜”:(nowstate-x==10?”农夫羊”:”农夫狼”)))<<“回来”<<endl;

return x;
}
x=nowstate&7;
if(search(x)!=-1)
{
cout<<(nowstate==15?”结束谁也不用”:(nowstate-x==8?”农夫”:(nowstate-x==9?”农夫白菜”:(nowstate-x==10?”农夫羊”:”农夫狼”))))<<“回来”<<endl;

return x;
}
}

}
int search(int state)
{
int *q=states;
if(state==3|state==6|state==9|state==12|state==4)
{
return -1;
}
for(int i=0;i<10;i++)
{
if(state==states[i])
return -1;

}

return state;
}

int find(int nowstate, int x,bool flag)
{
cout<<“now\t”<<nowstate<<endl;
int nextstate=moveto(nowstate,0,flag);
if(nowstate==15)
{
cout<<“结束”<<endl;
*++p=15;
return -1;}
if(nextstate==-1)
{
return -1;
}
else
{

*++p=nextstate;
find(nextstate,0,!flag);
}
}

int main() {
std::cout << “Hello, World!” << std::endl;
*p=0;
find(0,0,1);
return 0;

 

附件:

https://pan.baidu.com/s/1bpxnrKr

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

狼 羊 渔夫过河问题 的相关文章

  • 有没有办法分析 WCF 应用程序的性能?

    我们正在尝试测量我们的系统的性能 该系统是一个使用 WCF 调用的 NET 3 5 应用程序 问题是到目前为止 我们无法分析这些调用中的方法 编写了一个 winforms 客户端应用程序来测试我们的系统 我们尝试使用ANTS 4 Profi
  • 如何拦截 .Net 中第三方库对非虚拟方法的调用?

    我认为我需要的是 net 人们称之为 透明动态代理 的东西 但到目前为止我所看到的所有实现 Castle DynamicProxy Spring NET AOP 等 都要求我至少执行以下操作之一 将拦截的方法声明为虚拟方法 包装类并创建包装
  • 即使我没有#include ,为什么仍然可以使用 std::max 和 std::min ?

    include
  • 多个源文件中包含包含“const”的头文件

    Why does not包含定义的头文件const并被多个源文件包含会产生编译错误multiple definition const in header file h const int num 5 int x Error Multiple
  • Reflection.Emit 中的短格式操作码错误

    我正在制作一种与以下非常相似的小语言hlsl但仅支持像素着色器 该语言使用reflection emit构建实现相同功能的 NET 程序集 我目前正在测试分支指令的实现if在我的一个单元测试中 一个大的if与内if elses 失败并显示以
  • C# - 如何将 IntPtr 缓冲区数据保存到文件(最快的方法)?

    我使用此代码将非托管代码中的 IntPtr 缓冲区中的字节保存到文件中 这是一个简单的回调函数 private void callback IntPtr buffer int length byte bytes new byte lengt
  • 用 C++ 解密文件,该文件使用 openssl -aes-128-cbc 加密

    我正在尝试用 C 解密文件 该文件使用以下命令加密 openssl enc nosalt aes 128 cbc pass pass test in test txt out test enc txt p 控制台显示key 098F6BCD
  • WIX 自动生成 GUID *?

    假设我生成产品 ID 为 的 WIX XML 文件 另外 对于每个组件 GUID 我都使用
  • 使用 Thread.Sleep() 时,异步编程如何与线程一起工作?

    假设 前言 在之前的问题中 我们注意到Thread Sleep阻塞线程参见 什么时候使用Task Delay 什么时候使用Thread Sleep https stackoverflow com questions 20082221 whe
  • c++11 中的 std::thread 问题

    我在尝试从标准模板库编译具有多线程的程序时遇到一些麻烦 当我尝试编译以下程序时 它返回一个晦涩的错误 include
  • 使用经度和纬度查找给定距离内的所有附近客户

    我有一个包含客户经度和纬度的数据库 我有一个搜索表单 用户将在其中输入日志 纬度 距离下拉列表包含 50 英里 100 英里 当用户单击搜索时 我想编写一个 linq 查询从数据库中获取此距离半径内的所有客户 如何使用 C 和 linq 来
  • 让 WIX 在项目中包含引用

    我对 WiX 和设置自定义安装程序完全陌生 所以我对问题的主题表示歉意 我有一个内部业务应用程序 日记 它构建并运行良好 因此我按照教程 官方文档添加 WiX 项目并引用日记的 csproj 然后构建并运行这个最基本版本的 WiX 安装程序
  • 读取所有进程内存以查找字符串变量c#的地址

    我有 2 个用 C 编写的程序 第一个名为 ScanMe 的程序包含一个包含值 FINDMEEEEEEE 的字符串变量 以及一个值为 1546 22915487 的双精度变量 另一个名为 MemoryScan 的程序读取第一个程序的所有内存
  • 专家 C#/.Net/WPF 开发人员应该了解哪些知识? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 C# 中加密并在 Flex 中解密

    我需要解密 Flex 中的一些数据 这些数据是用 C 加密并写入文件的 为了简单起见 我选择使用 as3crypto As3 库和 Bruce Schneier C 库 AS3 as3加密链接 http code google com p
  • gcc 中的“假设”子句

    gcc 最新版本 4 8 4 9 是否有类似于以下的 假设 子句 assume 内置icc支持吗 例如 assume n 8 0 从 gcc 4 8 2 开始 gcc 中没有 assume 的等效项 我不知道为什么 这会非常有用 马夫索建议
  • 为什么 OOP 中静态类的最佳实践有所不同?

    我目前正在阅读有关 Java 最佳实践的内容 我发现根据这本书 https rads stackoverflow com amzn click com 0321356683我们必须优先选择静态类而不是非静态类 我记得在 C 最佳实践中 我们
  • 修改公共属性的访问修饰符是否是重大更改?

    如果我将公共属性的 setter 的访问修饰符从私有更改为公共 是否会导致引用它的其他程序集发生任何重大更改 UPDATE 这个问题是我 2012 年 1 月博客的主题 https ericlippert com 2012 01 09 ev
  • 在 C# 中将 ulong 映射到 long ?

    我正在尝试将 ulong 映射到 long 反之亦然 将 uint 映射到 int 反之亦然 如下所示 为了将值保存在具有签名类型的 MS SQL 数据库中仅限整数和大整数 我这样做是因为我必须检查 在数据库中 一个数字 uint ulon
  • 父窗体中的居中消息框[重复]

    这个问题在这里已经有答案了 有没有一种简单的方法可以在 net 2 0中将MessageBox居中于父窗体中 我在 C 中确实需要这个并发现中心消息框 C http bytes com topic c sharp answers 26712

随机推荐

  • virtualbox 安装centos7之后无法ssh登陆

    文章目录 virtualbox 安装 centos7 开启centos7网络 sshd 服务是否开启 设置 virtualbox 端口转发功能 设置secureCrt 连接参数 virtualbox 安装 centos7 virtualbo
  • 贝叶斯网络与R语言

    贝叶斯网络与R语言 基本语句 1 1网络的创建 加载扩展包和bnlearn包自带数据集marks 数据集marks 88 学生5门课的成绩 MECH mechanics VECT vectors ALG algebra ANL analys
  • 十一. Kubernetes 容器 container 设置详解

    目录 一 基础解释 yaml设置容器拉取镜像注意点 1 containers image 镜像 2 containers imagePullPolicy 镜像拉取策略 3 配置拉取私库镜像 spec下的imagePullSecrets 4
  • 【六级单词】

    affordable 价格合理的 cash 现金 insurance 保险 forune 一大笔钱 机会 运气 misfortune 不幸 灾难 luxury 奢侈 豪华 luxurious shop pension 养老金 抚恤金 com
  • C语言每日一题:16:数对。

    思路一 基本思路 1 x y均不大于n 就是小于等于n 2 x y大于等于k 3 一般的思路使用双for循环去遍历每一对数 代码实现 include
  • pytorch霹雳巴拉——图像分类篇

    up给的教程路线 图像分类 目标检测 一步步学习用pytorch实现深度学习在cv上的应用 并做笔记整理和总结 参考内容来自 up主的b站链接 https space bilibili com 18161609 channel index
  • layui 动态加载 select

    感谢小张帅三代以及他的好文 layui ajax select 动态添加数据方法 给我指明了前进的方向 首先 这是一个学习的过程 并不是最优方案 只是 玩索而有得 而己 做了一个联动的搜索框 本来一开始想用layuiselect第三方插件
  • 图的遍历方法——DFS和BFS

    DFS类似于树的先序遍历 因此可以用递归实现 BFS类似于树的层次遍历 因此可以用队列实现 说明 下面代码中图的存储方式是邻接表 关于邻接表和邻接矩阵可看邻接表和邻接矩阵 1 深度优先遍历 Depth First Search 思想 从图中
  • 微信小程序实现单/多图片上传(预览删除)

    wxml结构 上传图片
  • Linux中Vim文件夹路径,一些有用的Linux命令和Vim使用总结

    常见Linux命令 文件复制 移动 删除 创建 复制 cp v 源文件路径 目标文件路径 移动 mv v 源文件路径 目标文件路径 删除 rm v 文件路径 rmdir v 文件夹路径 文件夹要为空 rm rv 文件夹路径 递归删除文件夹及
  • Qt界面开发(一)(各种控件以及图表)

    注 资源主要来源 http www qtcn org bbs u 110085 刘大神 如若侵权 请联系删除 本文只是将作品集合到起来 方便大家一起学习 资源集合已经放到 链接 https pan baidu com s 1sVvQE8uD
  • ts 因为在此系统上禁止运行脚本(win10系统)

    今天弄了一下Ts 有点晚了 但是确实是才开始尝试 以前只是看了看 1 先安装 npm install g typescript 2 安装成功 typescript 4 0 3 added 1 package from 1 contribut
  • Goby的使用 漏洞扫描工具

    获取自己虚拟机的ip 打开Goby 点击扫描 输入虚拟机的IP地址 开始扫描 扫描结束这里没有扫到漏洞 点击报告查看报告 右上角下载生成报告 漏洞举例
  • C++学习笔记之浅拷贝&深拷贝的理解

    一 浅拷贝 浅拷贝就是把类中的成员属性简单的复制 如果有指针成员变量 也只是拷贝指针的地址 下面案例就是先创建teacher1对象 再把它初始化给teacher2对象 在初始化时需要调用复制构造函数 因为Teacher类没有重写复制构造函数
  • 使用docker搭建一个完全分布式的hadoop集群

    项目地址 https github com czfshine docker hadoop docker hadoop A dockerfile for setting up a full Hadoop cluster server 一套在u
  • C++ fopen、CFile如何以UTF-8编码格式读写文件

    How to write UTF 8 file with fprintf in C http stackoverflow com questions 10028750 how to write utf 8 file with fprintf
  • 从零搭建分布式文件系统MinIO比FastDFS要更合适

    前两天跟大家分享了一篇关于如何利用FastDFS组件来自建分布式文件系统的文章 有兴趣的朋友可以阅读下 用asp net core结合fastdfs打造分布式文件存储系统 通过留言发现大家虽然感兴趣 但是都觉得部署比较麻烦 的确 fastd
  • Java项目使用jib打包docker镜像的简单记录

    jib主要用来在没有docker环境下将项目打包成docker镜像 主要有一下四种方式 maven gradle core cli 本文主要介绍cli和maven两种打包方式 github地址 https github com Google
  • sap生产工单报工_一图看懂SAP 生产订单报工

    经典面试问题之一 请问生产订单报工有什么影响 答 记录了工序完成情况 记录产出和报废数量 记录人工工时和机器工时等 评 新顾问吧 再多讲两句 来个一览图 一图看懂报工业务概览 该图充分体现了SAP ERP系统的集成性 一个小小的工人报工动作
  • 狼 羊 渔夫过河问题

    这几天碰到一个有意思的程序 讲的是狼 羊 白菜船夫要过河 从南岸到北岸 结果每次船只能载船夫和一个东西 而且如果船夫不在场的话 狼会偷偷吃掉羊 羊会偷偷吃掉白菜 自己写一个算法求出可行的方案 首先我的想法是 用四个位表示这四个 然后位为0表