农夫过河C++代码

///农夫过河C++代码

///   作者:lyb661  时间:2015年8月

/*

农夫过河问题思路:主要使用用容器,一个存储此岸,一个存储彼岸,一个存储结果(用于打印).

过河全部过程都是随机的,都由容器来选择。所以打印结果每次可能不一样,比如:

羊过-狼过-羊回-菜过-羊过 或:羊过-菜过-羊回-狼过-羊过.

这个程序是2015年做的,当时不知道发的什么疯,做出来的。现在看起来有的笨拙,有时间再简化一下。

*/

#include

#include

#include

#include

#include

#include

using namespace std;

void out(int a){cout<

int main(){

srand(time(0));

int ar[]={1,2,3};///1=wolf狼,2=sheep羊,3=vegetable菜

listlista(ar,ar+3); ///this bank 此岸

vectorvec;///hold result  保存过河结果 用于打印渡河过程例如1代表羊过河-1代表羊回来

listlistb; ///another bank  彼岸

///step 1:over sheep

while(lista.size()>2){

listlistat(lista); ///listat=lista ///listat用来保存lista的数据

int n=rand()%lista.size();///will 0/1/2

int m=n;

lista.remove(n+1);///remove 1/2/3

if(((find(lista.begin(),lista.end(),1)!=lista.end())&&

(find(lista.begin(),lista.end(),2)!=lista.end()))

||((find(lista.begin(),lista.end(),2)!=lista.end())&&

(find(lista.begin(),lista.end(),3)!=lista.end())))

{

lista.swap(listat);continue;///要是剩下狼羊或羊菜就重做

}

else{listb.push_back(m+1);vec.push_back(m+1);}

}

///step 2:over wolf or vegetable

{

int n=rand()%lista.size();/// will be 0 or 1  用做容器下标

n = n==1?2:0;             /// will be 0 or 2  代表容器元素

lista.remove(n+1);

int m=n;

listb.push_back(m+1);

vec.push_back(m+1);

/*

or like this

vectorvca(lista.begin(),lista.end());

int n=rand()%vca.size();

int m=vca[n];

lista.remove(m);

listb.push_front(m);

vec.push_back(m);

*/

}

listb.sort();

///step 3 is sheep back

while(listb.size()>1){

listlistat(lista);

listlistbt(listb);

vectorvcb(listb.begin(),listb.end());

int n=rand()%vcb.size(); ///0 or 1

int m=vcb[n];///1,2 or 2,3

listb.remove(m);

lista.push_front(m);

if(find(listb.begin(),listb.end(),2)!=listb.end())

{

lista.swap(listat);

listb.swap(listbt);continue;

}

else

{

vec.push_back(-m);

}

}

lista.sort();

///step 4:over vegetale or wolf over river

///step 4 is success

while(lista.size()>1){

listlistat(lista);

listlistbt(listb);

vectorvca(lista.begin(),lista.end()); ///向量vca临时保存lista方便下标操作

int n=rand()%vca.size();///will be 0 or 1

int m=vca[n];  ///1,2 or 2,3

lista.remove(m);///remove 1 or 3

listb.push_front(m);

if(((find(listb.begin(),listb.end(),1)!=listb.end())&&

(find(listb.begin(),listb.end(),2)!=listb.end()))

||((find(listb.begin(),listb.end(),2)!=listb.end())&&

(find(listb.begin(),listb.end(),3)!=listb.end())))

{                     ///彼岸也一样同时发现羊狼或者羊有菜就重做

lista.swap(listat);

listb.swap(listbt);continue;

}

else

{

vec.push_back(m);

}

}

///step 5:is success!

{

int n=rand()%lista.size();

vectorvca(lista.begin(),lista.end());

int m=vca[n];

lista.remove(m);

listb.push_front(m);

vec.push_back(m);

}

listb.sort();

///out put the result:

cout<

for_each(lista.begin(),lista.end(),out);

///对顺序容器执行某项操作,如果不成功则不会改变原状态

cout<

for_each(listb.begin(),listb.end(),out);

cout<

for(int i=0;i!=vec.size();i++)

{

switch(vec[i])

{

case 1:cout<

case -1:cout<

case 2:cout<

case -2:cout<

case 3:cout<

case -3:cout<

default:cout<

}

}

cin.get();

return 0;

}

[此贴子已经被作者于2019-1-16 19:32编辑过]

c语言农夫过河游戏代码解释,农夫过河C++代码相关推荐

  1. c++贪吃蛇游戏-详细解释-非单纯贴代码

    先说明下:本文来源:https://blog.csdn.net/silence1772/article/details/55005008 写在前面,这个项目,希望大家先下载下来,玩一玩.然后2天左右把 ...

  2. c语言打袋鼠游戏,搜狐 袋鼠过河 动态规划

    题目描述 一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳的更远.每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为 ...

  3. 如何用c语言编写军旗游戏

    今天教大家如何用C语言编写军旗游戏 ~ 1.效果图: 2.主要代码: #include <graphics.h> #include <time.h>#define CHESIZ ...

  4. 农夫过河游戏的几种处理方法(DFS深度优先搜索,BFS广度优先搜索)

    农夫过河游戏规则:在左岸有农夫.狼.羊.菜,农夫需要想办法将狼.羊.菜最终都带到右岸,条件就是农夫不在的时候,狼会吃羊,羊会吃菜,而且每次只能带一样,或者不带. 这里会用到堆栈.队列.列表这样的数据结 ...

  5. 智力过河游戏c语言,Flash AS代码实现智力过河小游戏

    本教本教程主要用Flash AS来编写一个智力过河小游戏,全部使用AS代码来实现,教程比较基础,转发过来,希望对大家有所帮助. 游戏规则: 一只大狮子,一只小狮子,一只大老虎.一只小老虎.一只大花豹, ...

  6. 农夫过河算法java,Java农夫过河问题的继承与多态实现详解

    Java农夫过河问题的继承与多态实现详解 发布时间:2020-08-22 06:04:29 来源:脚本之家 阅读:61 作者:小任性嘛 题目描述: 一个农夫带着一匹狼.一只羊.一颗白菜要过河,只有一条 ...

  7. 2048游戏c语言linux简易代码,C语言实现2048游戏代码

    本文实例为大家分享了C语言实现2048游戏具体代码,供大家参考,具体内容如下 效果图: 使用文本界面的屏幕绘图库 ncurses. 设计思路: 在满足条件情况下消除方块 允许在游戏主界面(16 宫格) ...

  8. c语言2048代码linux,C语言2048小游戏课设(附源码).doc

    PAGE PAGE 1 C语言2048小游戏课设 项目说明 本系统基于C语言开发,适用于刚入门的C语言新手项目课设,开发软件采用VC++6.0开发,VS,DEV C++等均可运行.(书生) 项目运行截 ...

  9. c++扫雷游戏代码_C语言学习教程,用C语言编写扫雷游戏

    本文实例为大家分享了C语言实现扫雷游戏及其优化的具体代码,供大家参考,具体内容如下 关于扫雷优化 1.核心思想:使用两个二维数组进行设计,一个用于显示,一个用于后台雷的布置. 2.使用宏常量,后期可以 ...

最新文章

  1. VS2013环境生成和调用DLL动态链接库
  2. 第7课第2节_Binder系统_c++实现_编译测试
  3. failed to open mysql_MySql使用全记录5 —–解决Windows下用命令导入sql文件时”Failed to open file”的问题 | 学步园...
  4. 听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译
  5. 使用ElasticSearch进行近实时索引
  6. TextBoxWatermarkExtender扩展器与RequiredFieldValidator控件相冲突的解决方案
  7. [2018.07.21 T2] 离家出走
  8. psp java运行环境_手机模拟器?PSP的Java环境PSPKVM 0.0.7发布
  9. DVP MIPI-CSI 摄像头接口的区别
  10. 使用matlab对图像进行二值化处理
  11. android路由器安装wifidog,openwrt下的wifidog安装及web认证界面设置
  12. PS纯色图标更换颜色
  13. java-php-python-ssm企业员工考勤系统的设计与实现计算机毕业设计
  14. html元素拖拽 标签拖拽
  15. HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.S
  16. 贪吃蛇c语言程序复杂,刚学C语言,想写一个贪吃蛇的代码
  17. 45RF SOI CMOS
  18. 数字信号处理——振动篇
  19. 跨国引入强势技术 安全行业又添生力军
  20. 熊掌号php推送一次最多提交2000条,利害了我的熊掌号-熊掌号历史数据提交效果明显...

热门文章

  1. thread 在 surfaceview 中的使用与删除
  2. Linq to SQL 下篇
  3. event loop、进程和线程、任务队列
  4. 小猿圈Web前端开发学习路线
  5. 机器学习中的度量—— 向量距离
  6. Angular Filter实现页面搜索
  7. linux查看内存、CPU占用资源最多的进程
  8. SCCM 2016 客户端硬/软件资产收集 (一)
  9. 【BZOJ2662】【BeiJing wc2012】冻结 分层图 裸的!
  10. javascript等号判断相等流程