试验分油问题.DOC

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验:分油问题 实验名称 使用深度优先搜索算法或者广度优先搜索算法来解决分油问题。 实验要求 使用深度优先搜索算法或者广度优先搜索算法来解决。 确定智能算子,得出最终结果。 实验内容 问题描述 两个小孩去打油,一人带了一个一斤的空瓶,另一个带了一个七两,一个三两的。原计划各打一斤油,可是由于所带的钱不够,只好两人合打了一斤油,在回家的路上,二人想平分这一斤油,可是又没有其它工具。试仅用三个瓶子(一斤、七两、三两)精确地分出两个半斤油来。 试编写程序进行分析并提出解决方案。 算法描述 本人使用广度优先搜索算法。 1).初始状态插入数组中,作为根节点; 2).根据提供的智能算子,广度优先搜索出跟之前没有重复的子节点,并依次插入到数组中; 3).判断当前节点是否为目标状态,如果是则终止并输出此节点的在数组中的位置,如果不是则将位置加一,转向2)进行递归。 部分代码 //判断数据是否已经存在 private static boolean isExistData(int x, int y, int z){ boolean lpBool = false; for(int i=0; i=cnum; i++){ if(oilData[i][1]==x oilData[i][2]==y oilData[i][3]==z){ lpBool=true; break; } } return lpBool; } //判断数据是否是目标结点 private static boolean isAimData(int n){ boolean lpBool = false; if(oilData[n][1]==5 oilData[n][2]==5 oilData[n][3]==0){ lpBool=true; } return lpBool; } //根据规则进行分油,产生新的子节点数据 private static void distrOilByRule(int n){ int x=0,y=0,z=0,x1=0,y1=0,z1=0; x=oilData[n][1]; y=oilData[n][2]; z=oilData[n][3]; if(z0){ x1=x+z; y1=y; z1=0; if(!isExistData(x1,y1,z1)){ addData(x1,y1,z1,n); } } if(y0){ x1=x+y; y1=0; z1=z; if(!isExistData(x1,y1,z1)){ addData(x1,y1,z1,n); } } if(x0y7){ x1=x+y-7; y1=7; z1=z; if(!isExistData(x1,y1,z1)){ addData(x1,y1,z1,n); } } if(x0z3){ x1=x+z-3; y1=y; z1=3; if(!isExistData(x1,y1,z1)){ addData(x1,y1,z1,n); } } if(y0y+z3){ x1=x; y1=0; z1=y+z; if(!isExistData(x1,y1,z1)){ addData(x1,y1,z1,n); } } if(z0y+z7){ x1=x; y1=y+z; z1=0; if(!isExistData(x1,y1,z1)){ addData(x1,y1,z1,n); } } if(z0y7z+y=7){ x1=x; y1=7; z1=z+y-7; if(!isExistData(x1,y1,z1)){ addData(x1,y1,z1,n); } } if(y0z3y+z=3){ x1=x; y1=y+z-3; z1=3; if(!isExistData(x1,y1,z1)){ addData(x1,y1,z1,n); } } } //按递归方式进行分油,并返回最终结果在数组中的位置 private static int distrOil(int n){ if(isAimData(n)){ return n; }else{ distrOilByRule(n); n++; return distrOil(n); } } //主程序 public static void main(St

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档