问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

过河问题-数学建模C++实现

发布网友 发布时间:2022-12-28 08:42

我来回答

1个回答

热心网友 时间:2023-10-09 19:14

经典的过河问题:一个人(猎人)带了:一只鸡(羊),一条狗(狼),一袋米(草),遇到一条河,河边有一条船,船太小每次只能带一样东西,此人如何将自己的三件物品完好的带到对岸?

(注:若是VS2010开发工具源码复制可直接运行,若是其他开发工具,可能要小部分修改,源码核心算法不用改动。具体实现请查看相应注释!此文仅供学习参考!)

程序源码:

// CrossRiver.cpp :定义控制台应用程序的入口点。

//开发工具:VS2010旗舰版

//系统环境:window7旗舰版

//实现语言:C语言

//班级:计算机XXX班

//学号:20XXXXXXXXXX

#include"stdafx.h"

#include

boolisEnd(int [],int );//判断是否结束

int_tmain(int argc, _TCHAR* argv[])

{

intA[4]={0,0,0,0};//定义人、狗、鸡、米的初始状态,此时四者都在此岸

//定义过渡状态,包括:人自己过河,人载狗过河,人载鸡过河,人载米过河,四种状态。

//注:其中最后的一维用来标记该向量是否已被使用,使用记为1,未使用记为0,在数组中即是a[x][4]存放的变量。

inta[4][5]={{1,0,0,0,0},{1,1,0,0,0},{1,0,1,0,0},{1,0,0,1,0}};

//保存输出的对应步骤的字符串

char* str[4]={"人划船过河","人划船载狗过河","人划船载鸡过河","人划船载米过河"};

//问题描述

printf(">>>>>>>>某日,路人甲在河边遇到了一个难题:\n");

printf("\t他带了三件物品:一只狗、一只鸡、一袋米要到河的对岸去,然而河边的\n");

printf("\t小船载重太小,每次只允许载三件物品里的一件过河。但是,人不在的\n");

printf("\t时候,鸡和米或狗和鸡在一边时,鸡会去吃米,狗会去咬鸡。\n");

printf(">>>>>>>>那么他该如何过河才能保证三件物品完好无损呢?\n");

printf("\n---解---过河步骤如下:\n");

//记录步骤

int n=1;

//开始进行状态转移

while(!isEnd(A,4)){

for(int i=0;i<4;i++){

//当过渡状态向量未被使用时

if(!a[i][4]){

//保存转换中间态

int B[4];

//异或运算,求转换态

for(int k=0;k<4;k++){

B[k]=A[k]^a[i][k] ;

}

//状态(1,0,0,x)是不允许的,此时人在河的彼岸,有没有载米过去,狗和鸡都会出现问题。

//状态(0,1,1,x)是不允许的,此时人在河的此岸,有没有载米回来,狗和鸡都会出现问题。

if((!B[1]&&!B[2]&&B[0])||(B[1]&&B[2]&&!B[0]))continue;

//状态(1,x,0,0)是不允许的,此时人在河的彼岸,有没有载狗过去,鸡和米都会出现问题。

//状态(0,x,1,1)是不允许的,此时人在河的此岸,有没有载狗回来,鸡和米都会出现问题。

elseif((!B[2]&&!B[3]&&B[0])||(B[2]&&B[3]&&!B[0]))continue;

//其它状态允许

else {

//改变状态

for(int j=0;j<4;j++){

A[j]=B[j];

}

//表示该状态已被使用

a[i][4]=1;

//输出对应的步骤描述

printf("\n-%d-%s\n",n,str[i]);//输出相应步骤

//步骤加一

n++;

}

}

//当过渡向量已被使用时,修改其使用状态值,以便于下一次使用。

else a[i][4]=0;

}

}

printf("\n----------------------此时,人、狗、鸡、米已全部过河!\n");

system("pause");

//结束

return 0;

}

boolisEnd(int L[],int n){//判断是否结束,只要状态向量有一个为零,即还未结束。

for(int i=0;i

//判断状态向量的各个值,为零即停止循环,返回false

if(!L[i])return false;

}

//状态向量的各个值都为1,这表示四者都已在彼岸。过河完成!

return true;

}

运行结果:
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑wifi已禁用怎么打开电脑无线网络禁用了怎么恢复 ...禁用网络在哪重开win7笔记本无线网络被禁用了怎么办 win7网络禁用怎么恢复 windows7网络被禁用怎么恢复 Win7系统本地连接禁用了怎么恢复Win7系统启动本地连接的两种方法图文... 梦见家人去世什么预兆 ...经缝针现在基本痊愈,一个月过去了现在就是小腿还不能贴大腿,最近感... 小腿缝针拆线三个月了表皮长好了里面的肉怎么有点带黑红色还有点白色... 小腿迎面骨掉快深宽都1厘米左右的肉。当时没缝针。已经20天了。天天... 运费和快递费各走 什么科目? 快递费用放什么科目 问一个正经的问题,学过古筝对自学古琴有帮助吗 阿拉德之怒角色翻页(智能选择角色)靠什么辅助好? 擦cc霜之前要用隔离吗 cc霜在隔离霜前还是后 用了隔离霜还有必要用cc霜吗 二按一求写单词。1.mother( 对应词)( )2.b 寻枪简介及详细资料 mother的对应词 关于mother的对应词 王雷个人资料简介 与李小萌结婚时已低调相恋7年 央视有两个李小萌吗 发短信发不了怎么回事 阿富汗全称叫什么斯坦 进来看看 iphone13promax和12promax的区别 13promax和12promax的区别 12promax和13哪个值得入手 变卦怎么看? 文言文关于忍让的句子 宽容忍让的经典句子 人不能太忍让经典的话 忍让的经典句子(70句) 保定有几所大学? 无妄之灾什么意思?有什么历史典故?反义词和近义词是什么? &#xFEFF;12道美味又营养的砂锅菜谱推荐 《赤松威龙》观后感作文,我要作文啊,速度速度啊! 为什么收不到兰州银行的语音验证码信息 什么动漫,电影好看 苹果恢复手机提示要属于一个163邮箱密码 用word2007写好正文,插目录的之后调整的时候正文全没了,各位大神,求指教怎么恢复我的正文? 外星人进家第一集欣灵是不是外星人 欣灵电器为什么没有上市 欣灵电器比正泰电器好吗 欣灵电气厂房什么时候完工的 欣灵电气中一签能赚多少 欣灵电气上市为什开盘不成功 马嘉祺属什么生肖? 马嘉祺在哪里读高中? 马嘉祺粉丝名称是什么? 为什么浏览器自动清空缓存 吕梁市恩泽餐饮有限公司爱八寸披萨店怎么样? 披萨营业执照名字是披萨店,可以卖面不能 气质高贵昵称 比较有气质的网名 赵越个人资料 赵越的介绍