商人过河问题java程序数学模型1617解答董安葳.docx

上传人:b****6 文档编号:3929818 上传时间:2022-11-26 格式:DOCX 页数:19 大小:96.15KB
下载 相关 举报
商人过河问题java程序数学模型1617解答董安葳.docx_第1页
第1页 / 共19页
商人过河问题java程序数学模型1617解答董安葳.docx_第2页
第2页 / 共19页
商人过河问题java程序数学模型1617解答董安葳.docx_第3页
第3页 / 共19页
商人过河问题java程序数学模型1617解答董安葳.docx_第4页
第4页 / 共19页
商人过河问题java程序数学模型1617解答董安葳.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

商人过河问题java程序数学模型1617解答董安葳.docx

《商人过河问题java程序数学模型1617解答董安葳.docx》由会员分享,可在线阅读,更多相关《商人过河问题java程序数学模型1617解答董安葳.docx(19页珍藏版)》请在冰豆网上搜索。

商人过河问题java程序数学模型1617解答董安葳.docx

商人过河问题java程序数学模型1617解答董安葳

数学模型第一次作业——董安葳

5123119董安葳

1.程序设计(Java语言):

本人设计的程序的特色是可以让用户随意设定商人和仆人的数量(商人数大于仆人数),船的载人数为2人。

本程序使用栈记录决策,使用向量记录一岸的商人数,采用遍历加回溯的方式实现。

代码行数:

440行。

importjava.util.Scanner;

importjava.util.Stack;

importjava.util.Vector;

publicclassBuiness{

publicstaticvoidmain(String[]args){

Stacks=newStack();//决策记录栈

VectorV=newVector();//记录已经有过的状态的向量

intx;//此岸的商人个数

inty;//此岸的仆人个数

intxx=0;//彼岸的商人数

intyy=0;//彼岸的仆人数

System.out.println("请输入商人的个数");

Scannerscn=newScanner(System.in);

x=scn.nextInt();//输入商人的个数

if(x<=0){//检测用户的错误输入

System.out.println("输入有误");

return;

}

System.out.println("请输入仆人数量:

");

y=scn.nextInt();

if(x

System.out.println("输入有误");

return;

}

intxuan=0;//过河决策方案标记

intxuan2=0;//返回决策方案标记

booleanff=false;//是否是选择返回方案标记

intinf=0;//选择过河方案成功与否标记

while(!

(x==0&&y==0)){//循环至全部都过河为止

if(ff==true){

xuan=0;//初始化返回决策方案

if(inf==0){//无适合的过河决策时,回溯返回方案

try{

V.remove(x*10+y);//弹出记录向量

}

catch(java.lang.ArrayIndexOutOfBoundsExceptione){//不能再弹出了,说明所有的方法都试过了,说明无解

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(newdk(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(newdk(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*10+y);

s.push(newdk(0,2,-4));

}

else{

yy=yy+2;

y=y-2;

yy=yy-1;

xx=xx-1;

y=y+1;

x=x+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(newdk(1,1,-5));

}

else{//没有合适的返回方案,回溯过河方案

try{

V.remove(x*10+y);

}

catch(java.lang.ArrayIndexOutOfBoundsExceptione){

System.out.println("无解");

return;

}

yy=yy+1;

xx=xx+1;

y=y-1;

x=x-1;

xuan=s.pop().xuann;//过河方案的回溯

if(xuan==1){

x=x+1;

y=y+1;

xx=xx-1;

yy=yy-1;

}

elseif(xuan==2){

x=x+2;

xx=xx-2;

}

else{

y=y+2;

yy=yy-2;

}

ff=false;

continue;

}

}

}

}

}

elseif(xuan2==-2){

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(newdk(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*10+y);

s.push(newdk(0,2,-4));

}

else{

yy=yy+2;

y=y-2;

yy=yy-1;

xx=xx-1;

y=y+1;

x=x+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(newdk(1,1,-5));

}

else{

try{

V.remove(x*10+y);

}

catch(java.lang.ArrayIndexOutOfBoundsExceptione){

System.out.println("无解");

return;

}

yy=yy+1;

xx=xx+1;

y=y-1;

x=x-1;

xuan=s.pop().xuann;

if(xuan==1){

x=x+1;

y=y+1;

xx=xx-1;

yy=yy-1;

}

elseif(xuan==2){

x=x+2;

xx=xx-2;

}

else{

y=y+2;

yy=yy-2;

}

ff=false;

continue;

}

}

}

}

elseif(xuan2==-3){

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*10+y);

s.push(newdk(0,2,-4));

}

else{

yy=yy+2;

y=y-2;

yy=yy-1;

xx=xx-1;

y=y+1;

x=x+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(newdk(1,1,-5));

}

else{

try{

V.remove(x*10+y);

}

catch(java.lang.ArrayIndexOutOfBoundsExceptione){

System.out.println("无解");

return;

}

yy=yy+1;

xx=xx+1;

y=y-1;

x=x-1;

xuan=s.pop().xuann;

if(xuan==1){

x=x+1;

y=y+1;

xx=xx-1;

yy=yy-1;

}

elseif(xuan==2){

x=x+2;

xx=xx-2;

}

else{

y=y+2;

yy=yy-2;

}

ff=false;

continue;

}

}

}

elseif(xuan2==-4){

yy=yy+2;

y=y-2;

yy=yy-1;

xx=xx-1;

y=y+1;

x=x+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(newdk(1,1,-5));

}

else{

try{

V.remove(x*10+y);

}

catch(java.lang.ArrayIndexOutOfBoundsExceptione){

System.out.println("无解");

return;

}

yy=yy+1;

xx=xx+1;

y=y-1;

x=x-1;

xuan=s.pop().xuann;

if(xuan==1){

x=x+1;

y=y+1;

xx=xx-1;

yy=yy-1;

}

elseif(xuan==2){

x=x+2;

xx=xx-2;

}

else{

y=y+2;

yy=yy-2;

}

ff=false;

continue;

}

}

else{//一定没有合适的返回方案,回溯过河方案

try{

V.remove(x*10+y);

}

catch(java.lang.ArrayIndexOutOfBoundsExceptione){

System.out.println("无解");

return;

}

yy=yy+1;

xx=xx+1;

y=y-1;

x=x-1;

xuan=s.pop().xuann;

if(xuan==1){

x=x+1;

y=y+1;

xx=xx-1;

yy=yy-1;

}

elseif(xuan==2){

x=x+2;

xx=xx-2;

}

else{

y=y+2;

yy=yy-2;

}

ff=false;

continue;

}

}

else{//过河成功,返回方案的设定

xx=xx-1;

x=x+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(newdk(1,0,-1));

}

else{

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(newdk(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(newdk(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*10+y);

s.push(newdk(0,2,-4));

}

else{

yy=yy+2;

y=y-2;

yy=yy-1;

xx=xx-1;

y=y+1;

x=x+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(newdk(1,1,-5));

}

else{

try{

V.remove(x*10+y);

}

catch(java.lang.ArrayIndexOutOfBoundsExceptione){

System.out.println("无解");

return;

}

yy=yy+1;

xx=xx+1;

y=y-1;

x=x-1;

xuan=s.pop().xuann;

if(xuan==1){

x=x+1;

y=y+1;

xx=xx-1;

yy=yy-1;

}

elseif(xuan==2){

x=x+2;

xx=xx-2;

}

else{

y=y+2;

yy=yy-2;

}

ff=false;

continue;

}

}

}

}

}

}

}

ff=true;

inf=0;//此次轮渡成功的标志

//过河方案的设定

x=x-1;

y=y-1;

xx=xx+1;

yy=yy+1;

if(((x>=y&&xx>=yy)||(x==0)||(xx==0))&&xuan<1&&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(newdk(1,1,1));

inf=1;

}

else{

x=x+

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1