写个过河算法

警察小偷爸爸妈妈儿子女儿过河,这个游戏不用说的吧,应该很多人见过,一般是考察隔壁邻居家小朋友智商的,有人把他做成了FLASH游戏。规则如游戏图。详细请看文件中那个FLASH游戏 :

那天看见MM在玩,一不小心说漏了嘴,为了让她不鄙视我,只有研究下算法了。

先来分析整个过程,想想怎么用程序实现。好了,经过了1/6小时后想到了种办法,用图来实现之。不能怪我呀,我现在天天写业务,数据结构忘的差不多了。(说话间飞来了个臭番茄,别砸我,我不说废话了,我交代)。

规划下,将游戏中所有人站的位置考虑成一个一个结点,那么我们整个游戏过程就是结点间连同图状。就是从

警察左 土匪左 爸爸左 妈妈左 儿子1左 儿子2左 女儿1左 女儿2左

连通到

警察右 土匪右 爸爸右 妈妈右 儿子1右 儿子右 女儿1右 女儿2右

中间有好多其他结点来提供进行一步一步的移动。为了体现面向对象的设计方法,我来用类实现她LET''S DO IT(又飞过来个番茄,好了我说中文了,OK)

然而理想和现实是有差距的,实践是检验真理的唯一标准,经过我N长时间实践过以后,明白了光靠左右2个状态值是不行的,经过改进后,类变成了如下形式。

首先是结点类,InWhere

定义如下:class InWhere
{
public:
  int boat; //船的位置,开始没有加这个,后来发现因为没有人在左边时候船在右边的话
  
  //////////////////////////////////////////////////////////////////////////////
    // 这种情况不存在,而且也容易产生错误。(船说到~靠,你以为我不是人就不叫
    // 对象了吗,小看我,U should be sorry tu me.好了我知道错了,开始没考虑你我浪
    // 费了好多时间了,已经受到精神上惩罚了,不要再肉体了)
    //////////////////////////////////////////////////////////////////////////////
  BOOL Test();//测试是否能符合结点条件
  int father;//爸爸
  int mother;//妈妈
  int plice;//警察
  int son1;//儿子1
  int son2;//儿子2
  int daughter1;//女儿1
  int daughter2;//女儿2
  int shife;//土匪(CS打多了,称号改不过来了)
  InWhere & operator =(const InWhere &other);
  BOOL operator ==(const InWhere &other);
  BOOL operator !=(const InWhere &other);
  InWhere();
  virtual ~InWhere();
};

时间: 2024-10-31 06:40:54

写个过河算法的相关文章

c++-?设计读者--写者问题的写者优先算法;

问题描述 ?设计读者--写者问题的写者优先算法: 学习Windows平台下信号量的API函数的使用: 编制读写进程的模拟信息文件,里面包含多个读写进程的运行描述:如0秒到达读进程1,读5秒结束:1秒到达写进程2,写3秒结束:2秒到达读进程3,读4秒结束.可以写为: 0:1,r,5; 1:2,w,3; 2:3,r,4; 编制读者--写者问题的写者优先算法,从进程模拟信息文件中取出进程信息,按要求启动对应的进程模拟程序,决定出读者/写者进程的运行次序. 测试:针对进程模拟信息文件里面的数据为正常.缺

java也能写出点点算法-像C++一样去优化核心并发的代码例子1

java其实更多用来写业务代码,代码写得好不好,关键看抽象能力如何,不过如果你要用java写很核心的插件和高并发的片段,那么可能还是需要注意一些写法,那种写法可能会更好,才能使得并发量提高,而且更少的使用CPU和内存:我最近在一段采集系统访问的java代码,通过过滤器切入到应用中,遇到的一些小细节的调整,感觉还有点意思,以下为收集信息中碰到的两个需要判定的地方(对java优化没有任何要求的,本文纯属扯淡,呵呵): 原始代码片段1(用于判定是否为静态资源): if(servletPath == n

不显示删除回复显示所有回复显示星级回复显示得分回复 Java写的快速排序算法,大家帮我指正下~看看有没有更好的实现方式~

问题描述 /**快速排序**/privatestaticintn=0;publicstaticvoidquickSort(int[]arr,intstart,intend){intkey=arr[start];inti=start,j=end;if(i==j){return;}while(i!=j){while(j>i){if(arr[j]<key){swap(arr,i,j);break;}j--;}while(i<j){if(arr[i]>key){swap(arr,i,j);

python写的算法与已上线的JavaWeb项目的结合

问题描述 python写的算法与已上线的JavaWeb项目的结合 JavaWeb是一个电子商务的项目且已经测试上线了,python写的算法是关于这个电子商务产品的推荐算法,近期刚完成.本来两个是独立的,现在要求把两个结合在一块,让那个python写的推荐算法自动运行,这个要怎么做? 解决方案 http://blog.sina.com.cn/s/blog_64e467d60100uhls.html 解决方案二: JavaWeb项目不是一次性项目的吗?怎么还可以在Java里面写?求解

javascript-关于JavaScript 国密算法

问题描述 关于JavaScript 国密算法 谁有研究国密算法,JavaScript写的SM4算法 最近在看这个 实在没有头绪 不知道怎么写 谁能给一些建议或者一些模块的代码 解决方案 基于现有已实现的C#版SM2国密算法的签名验证,再结合原来JavaScript的ECC算法,使用JavaScript实现SM2国密算法的签名验证相对简单,只需要将C#语言翻译成JavaScript语言实现.不过中间还是遇到了些问题,主要是在JavaScript计算SM3摘要值大数的运算上还是有些不同. 1)JS计

像建筑设计师一样去写代码

写代码和写文章,从某种程度上是相通的,需要逻辑.构架,也要尽可能的简练.我们之前说过,创作者的时间表和管理者的时间表是不一样的,编代码和写文章,都是一个孤独而不能受到干扰的过程,面对屏幕,就是一场自己与自己的战争.  同样,如果说建筑师最后的成品是建筑的话,那么程序员和软件工程师最终的成品就是软件.在实际动工之前,建筑师将会将建筑的每一个细节,都在蓝图上加以呈现.只是程序员和软件工程师并不会这么做.或许,这就是为什么房子很少倒塌,而软件却经常崩溃的原因?  设计蓝图会帮助建筑师确定他们的设计是可

MD5算法之C#程序 MD5算法描述

程序|算法 当我要写一个MD5算法的程序时,发现中英文的语言描述都有一些不确切的地方,某些个细节讲得不清楚,或者说很费解.最后不得不拿出C语言的源程序来调试,这对于理解算法是很不利的.于是就总结了一下我摸索到的一些要点. 1.来历MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest开发出来,经md2.md

找出m个数中最小的n个数的算法

这个问题属于常见问题了,我的办法是采用堆. 截取STL中的partial_sort算法的实现: template <class RandomAccessIterator, class T, class Compare> void __partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, T*, Compare comp) { make_heap(first

MD5算法描述的C#描述程序

MD5算法描述 当我要写一个MD5算法的程序时,发现中英文的语言描述都有一些不确切的地方,某些个细节讲得不清楚,或者说很费解.最后不得不拿出C语言的源程序来调试,这对于理解算法是很不利的.于是就总结了一下我摸索到的一些要点. 1.来历 MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest开发出来,经md2