一道关于数学建模问题~~~~商人们怎样安全过河~~~高手们帮帮忙~~~急~~~~·有四名商人各带一名仆人过河,但船最多能载二人,商人已获得仆人的阴谋:在河的任一岸,只要仆

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/06 17:36:25

一道关于数学建模问题~~~~商人们怎样安全过河~~~高手们帮帮忙~~~急~~~~·有四名商人各带一名仆人过河,但船最多能载二人,商人已获得仆人的阴谋:在河的任一岸,只要仆
一道关于数学建模问题~~~~商人们怎样安全过河~~~高手们帮帮忙~~~急~~~~·
有四名商人各带一名仆人过河,但船最多能载二人,商人已获得仆人的阴谋:在河的任一岸,只要仆人数超过商人数,仆人会将商人杀死并窃取财物且安排如何乘船的权力掌握在商人手中.试为商人制定一个安全过河的方案并说明理由

一道关于数学建模问题~~~~商人们怎样安全过河~~~高手们帮帮忙~~~急~~~~·有四名商人各带一名仆人过河,但船最多能载二人,商人已获得仆人的阴谋:在河的任一岸,只要仆
3人的可以过河,4人的没有办法.
用递归的源程序如下:
运行结果是没有解,超过3人的没有解.
开始时商人,强盗所在的河的这边设为0状态,另一边设为1状态(也就是船开始时的一边设为0,当船驶到对岸是设为1状态,在这两个状态时,都必须符合条件)
#include
struct node /*建立一个类似栈的数据结构并且可以浏览每一个数据点*/
{
int x;
int y;
int state;
struct node *next;
};
typedef struct node state;
typedef state *link;
link PPointer1=NULL;
link PPointer2=NULL;
int a1,b1;
int a2,b2;
/*栈中每个数据都分为0,1状态*/
void Push(int a,int b,int n)
{
link newnode;
newnode=(link)malloc(sizeof(state));
newnode-> x=a;
newnode-> y=b;
newnode-> state=n;
newnode-> next=NULL;
if(PPointer1==NULL)
{
PPointer1=newnode;
PPointer2=newnode;
}
else
{
PPointer2-> next=newnode;
PPointer2=newnode;
}
}
void Pop() /*弹栈*/
{
link pointer;
if(PPointer1==PPointer2)
{
free(PPointer1);
PPointer1=NULL;
PPointer2=NULL;
}
pointer=PPointer1;
while(pointer-> next!=PPointer2)
pointer=pointer-> next;
free(PPointer2);
PPointer2=pointer;
PPointer2-> next=NULL;
}
int history(int a,int b,int n) /*比较输入的数据和栈中是否有重复的*/
{
link pointer;
if(PPointer1==NULL)
return 1;
else
{
pointer=PPointer1;
while(pointer!=NULL)
{
if(pointer-> x==a&&pointer-> y==b&&pointer-> state==n)
return 0;
pointer=pointer-> next;
}
return 1;
}
}
int judge(int a,int b,int c,int d,int n) /*判断这个状态是否可行,其中使用了history函数*/
{
if(history(a,b,n)==0) return 0;
if(a> =0&&b> =0&&a =0&&c x,pointer-> y,pointer-> state);
pointer=pointer-> next;
}
getch();
}

先两个仆人过河,其中一个回来后载一个商人过河,再回来载个商人过河,再回来载个仆人过河,在回来载个商人过河,再回来载个仆人过河,最后回来载个商人过河

过河

假设商人和随从分别叫A和B,现在有AAAA+BBBB:
开始只能AB过去或者BB过去:
若是AB过去,只能A回来,BB过去,B回来,只能BB过去或者AA过去:
1.1若是BB过去,只能B回来,对面三个B,A不能过去,无解。
2.2若是AA过去,只能AB回来,重复开始的AB过去,死循环,无解。
若是BB过去,只能B回来,BB过去,B回来,BB过去,无解。

全部展开

假设商人和随从分别叫A和B,现在有AAAA+BBBB:
开始只能AB过去或者BB过去:
若是AB过去,只能A回来,BB过去,B回来,只能BB过去或者AA过去:
1.1若是BB过去,只能B回来,对面三个B,A不能过去,无解。
2.2若是AA过去,只能AB回来,重复开始的AB过去,死循环,无解。
若是BB过去,只能B回来,BB过去,B回来,BB过去,无解。
所以,这个破题无解。

收起