人狼羊菜问题的简单实现
人狼羊菜的编程实现
作为经典的智力问题,人狼羊菜问题的编程实现并不复杂,只要将人狼羊菜从高位到低位根据存在与否设置成0、1变量,引入可行变量与运载变量,通过穷举查找匹配得出可行的方案,直到所有变量全部转移到一边岸上即可。
代码如下:
#include<iostream>
#include<bitset>
usingnamespace std;
//人狼洋菜问题,二进制从高位到低位对应【人狼羊菜】
inttrans[4]={12,10,9,8};//运载变量
intpsb[10]={15,14,13,11,10,0,1,2,4,5};//可取状态
intbank_l=15;//左岸
intbank_r=0;//右岸
booltrans_ok(bool flag,int tran)
{//可否运输
if(flag)
return((~bank_l)&(tran))!=0?false:true;
else
return((~bank_r)&(tran))!=0?false:true;
}
boolbanks_ok()
{//两岸是否合适
bool flg1=false,flg2=false;
for (int i = 0; i < 10; i++)
if(bank_l==psb[i])
{
flg1=true;
break;
}
for (int i = 0; i < 10; i++)
if(bank_r==psb[i])
{
flg2=true;
break;
}
return flg1&flg2;
}
voidtran(bool flag,int tran)
{//执行运输之后的两岸
if(flag)
{
bank_l=bank_l-tran;
bank_r=bank_r+tran;
}
else
{
bank_r=bank_r-tran;
bank_l=bank_l+tran;
}
}
intmain()
{
bool flg=true;
cout<<bitset<4>(bank_l)<<"";
while (bank_l!=0)
{
for (int i = 0 ; i < 4;i++)
{
int r=bank_r;
int l=bank_l;
if(trans_ok(flg,trans[i]))
{
tran(flg,trans[i]);
if(banks_ok())
{//如果可以执行运载
flg=!flg;
cout<<bitset<4>(bank_l)<<"";
//输出左岸状态
}
else
{//不可以则恢复
bank_r=r;
bank_l=l;
}
}
}
}
return 0;
}
只可以得到单一可行解。
人狼羊菜问题的简单实现相关推荐
- C语言-人狼羊菜问题-最容易看懂的解决方法及代码
C语言-人狼羊菜问题-最容易看懂的解决方法及代码 参考文章: (1)C语言-人狼羊菜问题-最容易看懂的解决方法及代码 (2)https://www.cnblogs.com/zandbin/p/5341 ...
- 车羊问题c语言编程,C语言-人狼羊菜问题-最容易看懂的解决方法及代码
题目描述:农夫需要把狼.羊.菜和自己运到河对岸去,只有农夫能够划船,而且船比较小,除农夫之外每次只能运一种东西,还有一个棘手问题,就是如果没有农夫看着,羊会偷吃菜,狼会吃羊.请考虑一种方法,让农夫能够 ...
- 人,羊,狼,菜过河问题的计算机编程实现的matlab程序,人狼羊菜渡河问题(含Matlab程序)...
<人狼羊菜渡河问题(含Matlab程序)>由会员分享,可在线阅读,更多相关<人狼羊菜渡河问题(含Matlab程序)(2页珍藏版)>请在人人文库网上搜索. 1.人.狼.羊.菜安全 ...
- 基于深度优先搜索回溯法的人狼羊菜过河模型
基于深度优先搜索回溯法的人狼羊菜过河模型 本文介绍一个农夫过河的小模型,算法 Python 实现,感觉还挺有趣的,因原为笔者课程作业论文改版而来,所以文章内容比起其他博客文章可能会比较严肃与严谨.期待 ...
- php代码实现 人狼羊菜,让草根读懂“菜根”哲学:抛开“羊”与“狼”,做率真自在的人...
" 害人之心不可有,防人之心不可无,此戒疏于虑也."" 文章做到极处,无有他奇,只是恰好:人品做到极处,无有他异,只是本然."" 宠辱不惊,闲看庭前花 ...
- 11.12PTA训练 人狼羊菜过河 搜索,位运算
题意 人不在的时候狼吃羊,羊吃菜,用MWGC表示人狼羊草,箭头代表行进方向,输出所有由初始情况到最终情况的解决方案 思路 目前为止写得最头疼的搜索 因为一岸的状态确定了,另一岸也就唯一确定了,所以可以 ...
- c语言编程人狼羊菜过河,基于visual Studio2013解决C语言竞赛题之1079狼羊过河
题目 解决代码及点评 /************************************************************************/ /* ...
- 人狼羊菜过河matlab,农夫过河(带羊,菜,狼,过河) C语言程序设计流程图
农夫过河(带羊,菜,狼,过河) C语言程序设计流程图0 shadowylpw2013.05.15浏览830次分享举报 #include #include #include #define MAX_ST ...
- php代码实现 人狼羊菜,人羊菜以及狼的故事 .
第一个问题:帮助男人用船把狼.羊.和一箱菜运送到河对面,船一次只能运一样,而且有苛刻的附加条件:当男人不在时,狼会吃羊,羊也会吃卷心菜.移动鼠标,开始解题吧 没玩过的最好玩过再看我的代码,不懂的可以问 ...
最新文章
- list,set,map,数组间的相互转换
- 35 w年薪,入职CV算法岗,我一个双非本科生如何做到的?
- Android深度探索(卷1)HAL与驱动开发 第四章 源代码的下载和编译 读书笔记
- PyCharm设置字体大小(亲测)
- A comparative study of various methods of bearing faults diagnosis using the CWRU data.-学习笔记
- Visual Studio 2019 preview中体验C# 8.0新语法
- steghide隐写术
- 鸿蒙os2.0将再公测,“最强”系统跑步入场,华为鸿蒙OS 2.0公测再开启,幸福来得太突然!...
- 总结之:CentOS 6.5基于DHCP的PXE自动化安装系统详解
- WLC-生成CSR操作
- graph面板x轴模式包括哪些_Grafana panel之Graph
- 3D建模设计软件Rhino 7 for Mac
- Java进阶:SpringMVC中自定义类型转换器
- Halcon慢慢来(卡尺找线、找圆)
- 求解Ax=0:主变量、自由变量、特殊解
- 5分钟带你走进webpack
- ps入门第9天_ps色阶ps曲线 案例:ps照片校正
- mql4 c语言,MT4编程之MQL4编程语言介绍
- do还是doing imagine加to_请问,是“imagine sb. to do sth. ”还是“imagine sb. doing sth.”?...
- 关于添加SATA驱动的回复(XP安装时分两个阶段)