c语言农夫过河游戏代码解释,农夫过河C++代码
农夫过河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++代码相关推荐
- c++贪吃蛇游戏-详细解释-非单纯贴代码
先说明下:本文来源:https://blog.csdn.net/silence1772/article/details/55005008 写在前面,这个项目,希望大家先下载下来,玩一玩.然后2天左右把 ...
- c语言打袋鼠游戏,搜狐 袋鼠过河 动态规划
题目描述 一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳的更远.每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为 ...
- 如何用c语言编写军旗游戏
今天教大家如何用C语言编写军旗游戏 ~ 1.效果图: 2.主要代码: #include <graphics.h> #include <time.h>#define CHESIZ ...
- 农夫过河游戏的几种处理方法(DFS深度优先搜索,BFS广度优先搜索)
农夫过河游戏规则:在左岸有农夫.狼.羊.菜,农夫需要想办法将狼.羊.菜最终都带到右岸,条件就是农夫不在的时候,狼会吃羊,羊会吃菜,而且每次只能带一样,或者不带. 这里会用到堆栈.队列.列表这样的数据结 ...
- 智力过河游戏c语言,Flash AS代码实现智力过河小游戏
本教本教程主要用Flash AS来编写一个智力过河小游戏,全部使用AS代码来实现,教程比较基础,转发过来,希望对大家有所帮助. 游戏规则: 一只大狮子,一只小狮子,一只大老虎.一只小老虎.一只大花豹, ...
- 农夫过河算法java,Java农夫过河问题的继承与多态实现详解
Java农夫过河问题的继承与多态实现详解 发布时间:2020-08-22 06:04:29 来源:脚本之家 阅读:61 作者:小任性嘛 题目描述: 一个农夫带着一匹狼.一只羊.一颗白菜要过河,只有一条 ...
- 2048游戏c语言linux简易代码,C语言实现2048游戏代码
本文实例为大家分享了C语言实现2048游戏具体代码,供大家参考,具体内容如下 效果图: 使用文本界面的屏幕绘图库 ncurses. 设计思路: 在满足条件情况下消除方块 允许在游戏主界面(16 宫格) ...
- c语言2048代码linux,C语言2048小游戏课设(附源码).doc
PAGE PAGE 1 C语言2048小游戏课设 项目说明 本系统基于C语言开发,适用于刚入门的C语言新手项目课设,开发软件采用VC++6.0开发,VS,DEV C++等均可运行.(书生) 项目运行截 ...
- c++扫雷游戏代码_C语言学习教程,用C语言编写扫雷游戏
本文实例为大家分享了C语言实现扫雷游戏及其优化的具体代码,供大家参考,具体内容如下 关于扫雷优化 1.核心思想:使用两个二维数组进行设计,一个用于显示,一个用于后台雷的布置. 2.使用宏常量,后期可以 ...
最新文章
- VS2013环境生成和调用DLL动态链接库
- 第7课第2节_Binder系统_c++实现_编译测试
- failed to open mysql_MySql使用全记录5 —–解决Windows下用命令导入sql文件时”Failed to open file”的问题 | 学步园...
- 听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译
- 使用ElasticSearch进行近实时索引
- TextBoxWatermarkExtender扩展器与RequiredFieldValidator控件相冲突的解决方案
- [2018.07.21 T2] 离家出走
- psp java运行环境_手机模拟器?PSP的Java环境PSPKVM 0.0.7发布
- DVP MIPI-CSI 摄像头接口的区别
- 使用matlab对图像进行二值化处理
- android路由器安装wifidog,openwrt下的wifidog安装及web认证界面设置
- PS纯色图标更换颜色
- java-php-python-ssm企业员工考勤系统的设计与实现计算机毕业设计
- html元素拖拽 标签拖拽
- HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.S
- 贪吃蛇c语言程序复杂,刚学C语言,想写一个贪吃蛇的代码
- 45RF SOI CMOS
- 数字信号处理——振动篇
- 跨国引入强势技术 安全行业又添生力军
- 熊掌号php推送一次最多提交2000条,利害了我的熊掌号-熊掌号历史数据提交效果明显...