网站大量收购闲置独家精品文档,联系QQ:2885784924

商人过河问题java程序-数学模型1.6-1.7解答——董安葳.doc

商人过河问题java程序-数学模型1.6-1.7解答——董安葳.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数学模型第一次作业——董安葳 5123119 董安葳 1.程序设计(Java语言): 本人设计的程序的特色是可以让用户随意设定商人和仆人的数量(商人数大于仆人数),船的载人数为2人。本程序使用栈记录决策,使用向量记录一岸的商人数,采用遍历加回溯的方式实现。代码行数:440行。 import java.util.Scanner; import java.util.Stack; import java.util.Vector; public class Buiness { public static void main(String[] args) { Stackdk s=new Stackdk();//决策记录栈 VectorInteger V=new VectorInteger();//记录已经有过的状态的向量 int x;//此岸的商人个数 int y;//此岸的仆人个数 int xx=0;//彼岸的商人数 int yy=0;//彼岸的仆人数 System.out.println(请输入商人的个数); Scanner scn=new Scanner(System.in); x=scn.nextInt();//输入商人的个数 if(x=0){//检测用户的错误输入 System.out.println(输入有误); return; } System.out.println(请输入仆人数量:); y=scn.nextInt(); if(xy || y=0){ System.out.println(输入有误); return; } int xuan=0;//过河决策方案标记 int xuan2=0;//返回决策方案标记 boolean ff=false;//是否是选择返回方案标记 int inf=0;//选择过河方案成功与否标记 while(!(x==0 y==0)){//循环至全部都过河为止 if(ff==true){ xuan=0;//初始化返回决策方案 if(inf==0){//无适合的过河决策时,回溯返回方案 try{ V.remove(x*10+y);//弹出记录向量 } catch(java.lang.ArrayIndexOutOfBoundsException e){//不能再弹出了,说明所有的方法都试过了,说明无解 System.out.println(无解); return; } y=y+2; yy=yy-2;//恢复 xuan2=s.pop().xuann;//弹出决策方案 //按照弹出的不同的返回决策方案来重新选择,避免了重复的选择 if(xuan2==-1){ xx=xx+1; x=x-1; yy=yy-1; y=y+1;//恢复 if((x=y xx=yy) || (x==0) || (xx==0) x=0 y=0 xx=0 yy=0 (V.indexOf(x*10+y)==-1 || (V.size()-V.indexOf(x*10+y))%2!=0)){//满足不被仆人杀掉,满足没有重复的安排 V.add(x*10+y); s.push(new dk(0,1,-2)); } else{ yy=yy+1; y=y-1; xx=xx-2; x=x+2; if((x=y xx=yy) || (x==0) || (xx==0) x=0 y=0 xx=0 yy=0 (V.indexOf(x*10+y)==-1 || (V.size()-V.indexOf(x*10+y))%2!=0)){ V.add(x*10+y); s.push(new dk(2,0,-3)); } else{ xx=xx+2; x=x-2; yy=yy-2; y=y+2; if((x=y xx=yy) || (x==0) || (xx==0) x=0 y=0 xx=0 yy=0 (V.indexOf(x*10+y)==-1 || (V.size()-V.indexOf(x*10+y))%2!=0)){ V.add(x*1

文档评论(0)

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

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

1亿VIP精品文档

相关文档