数学建模研究商人过河问题Word格式.docx
- 文档编号:20834913
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:16
- 大小:27.19KB
数学建模研究商人过河问题Word格式.docx
《数学建模研究商人过河问题Word格式.docx》由会员分享,可在线阅读,更多相关《数学建模研究商人过河问题Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
if(p->
s1〉k2)return -1;
/*仆人数不能超过总仆人数*/
if(p-〉m1>k1)return-1;
/*商人数不能超过总商人数*/
if(p->s2〉k2)return—1;
/*对岸,同上*/
if(p-〉m2>
k1)return-1;
/*对岸,同上*/
if(p-〉s1〈0)return—1;
/*仆人数不能为负*/
if(p—〉s2<
0)return—1;
/*商人数不能为负*/
if(p—>
m1〈0)return—1;
/*对岸,同上*/
if(p-〉m2<
0)return —1;
/*对岸,同上*/
if(p->
m1!
=0)
if(p->s1>
p-〉m1)return—1;
if(p-〉m2!
=0)
if(p->s2>
p-〉m2)return-1;
/*两岸商人数均不能小于仆人数*/
while(p1!
=NULL){
p1=p1-〉back;
if(p1!
if(p1-〉n%2==p->n%2)
if(p1—〉s1==p->
s1)
if(p1-〉s2==p->s2)
if(p1->m1==p->
m1)
if(p1-〉m2==p-〉m2)
return -1;
}/*用于解决重复,算法思想:
即将每次算出得链表单元与以前得相比较,若重复,则表示出现循环*/
if(p—〉s1==0&
&p—〉m1==0)
n%2==0)return1;
elsereturn -1;
/*显然如果达到条件就说明ok了*/
return0;
}/*判断函数*/
intsign(intn){
if(n%2==0)return -1;
return1;
}/*符号函数*/
void copyit(structaim *p3,structaim*p){
p3->s1=p—>
s1;
p3—>
s2=p->
s2;
p3-〉m1=p->
m1;
p3-〉m2=p->m2;
p3-〉n=p->
n+1;
p3->
back=p;
next=NULL;
p-〉next=p3;
}/*复制内容函数,将p中得内容写入p3所指向得链表单元中*/
voidprint(struct aim*p3){
structaim*p=p3;
js++;
while(p->
back){p=p—〉back;
}
printf("\n第%d种方法:
\n",js);
fprintf(fp,"
\n第%d种方法:
\n",js);
intcount=0;
while(p){printf("
%ld,%ld:
:
%ld,%ld\t”,p-〉m1,p—>
s1,p->
m2,p—>s2);
fprintf(fp,"%ld,%ld:
:
%ld,%ld\t”,p—>
m1,p->
s1,p->
m2,p-〉s2);
p=p-〉next;
count++;
}
cout<
<"
一共有”〈〈count<
<
"步完成”<
<endl;
}/*打印函数,将p3所指得内容打印出来*/
voidtrans(structaim*p){
structaim *p3;
/*p3为申请得结构体指针*/
structa *fla;
int i,j,f;
fla=&
head;
p3=(structaim*)malloc(sizeof(structaim));
f=sign(p—>
n);
for(i=0;
i<total;
i++){
fla=fla->
next;
copyit(p3,p);
p3->
s1-=fla—〉m*f;
p3->
m1-=fla-〉s*f;
s2+=fla->m*f;
p3->m2+=fla->
s*f;
/*运算过程,即过河过程*/
j=determ(p3);
/*判断,j记录判断结果*/
if(j==-1){
if(i<
total-1){continue;
else{
freeit(p3);
break;
}}
intcount1=0;
if(j==1){if(i<
total-1){print(p3);
count1++;
continue;
else{print(p3);
freeit(p3);
break;
//cout<
cout1〈<endl;
printf(”%d”,count1);
printf("
\n");
if(j==0)trans(p3);
return;
}/*转移函数,即将人转移过河*/
/*n=0*/
voidmain()
{struct aim*p,*p1;
intj,a,e,f;
structa *flag;
/*flag就是用与记录头指针*/
;
if((fpt=fopen("
c:
result、dat”,"
w+”))==0){
printf("
can'
tcreatit\n”);
exit(0);
fp=fpt;
system(”cls"
);
printf("问题描述:
三个商人各带一个随从乘船过河,一只小船只能容纳X人,由她们自己划船。
三个商人窃听到随从们密谋,在河得任意一岸上,只要随从得人数比上人多,就杀掉商人。
但就是如何乘船渡河得决策权在商人手里,商人们如何安排渡河计划确保自身安全?
\n"
printf("\n");
p=(structaim*)malloc(sizeof(struct aim));
p—〉back=NULL;
p->
next=NULL;
p—〉s2=0;
p—>
m2=0;
p->
n=1;
/*设立初始头指针*/
printf(”pleaseinput the totalof peopleontheboard\n"
fprintf(fp,"
\n请输入船上得人数\n"
);
scanf(”%d",&
fprintf(fp,”\n%d\n"
n);
flag=&
head;
for(e=0;
e〈=n;
e++)
for(f=0;
f<
=n;
f++)
if(e+f〉0&
&
e+f<=n)
{ total++;
jj=(structa*)malloc(sizeof(structa));
jj—>m=e;
jj-〉s=f;
flag->next=jj;
jj->next=NULL;
flag=jj;
}
/*********************************/
printf("pleaseinputthetotalofmerchantandsalventasfollow:
mechant,salvent;
\n”);
fprintf(fp,"\npleaseinputthe totalofmerchant andsalventas follow:
mechant,salvent;
\n”);
scanf("%ld,%ld"
,&
p->m1,&p—〉s1);
fprintf(fp,"
\n%ld,%ld\n”,p->
m1,p—>
s1);
/**********************************/
k1=p—>m1;
k2=p->
s1;
trans(p);
fclose(fpt);
getch();
第一步:
三个商人,三个随从得模型求解答案为:
运行后得结果为:
第1种方案:
(3,3)到(0,0)、(3,1) 到(0,2)、(3,2)到(0,1)、(3,0)到 (0,3)、(3,1)到(0,2)、(1,1) 到 (2,2)、(2,2)到(1,1)、(0,2)到(3,1)、(0,3)到(3,0)、(0,1)到(3,2)、(0,2)到(3,1)、(0,0)到(3,3)
第2种方案:
(3,3)到(0,0)、(3,1) 到 (0,2)、(3,2)到(0,1)、(3,0)到(0,3)、(3,1)到 (0,2)、(1,1)到(2,2)、(2,2)到 (1,1)、(0,2)到(3,1)、(0,3) 到(3,0)、(0,1) 到(3,2)、(1,1)到 (2,2)、(0,0)到(3,3)
第3种方案:
(3,3)到(0,0)、(2,2)到 (1,1)、(3,2)到(0,1)、(3,0)到(0,3)、(3,1) 到(0,2)、(1,1)到(2,2)、(2,2) 到 (1,1)、(0,2)到(3,1)、(0,3)到 (3,0)、(0,1)到 (3,2)(、0,2) 到(3,1)、(0,0) 到 (3,3)
第 4种方案:
(3,3)到(0,0)、(2,2)到(1,1)、(3,2)到 (0,1)、(3,0)到 (0,3)、(3,1)到(0,2)、(1,1)到 (2,2)、(2,2)到 (1,1)、(0,2) 到(3,1)、(0,3)到(3,0)、(0,1) 到(3,2)、(1,1) 到 (2,2)(0,0)到(3,3)
第二步:
四个商人三个随从,其结果为:
第1种方法:
4,3:
0,0 3,2:
1,1 4,2:
0,1 2,2:
2,1 3,2:
1,1
2,1:
2,2 2,2:
2,1 0,2:
4,1 0,3:
4,0 0,1:
4,2
1,1:
3,2 0,0:
4,3 一共有12步完成
第2种方法:
4,3:
0,0 3,2:
1,1 4,2:
0,1 2,2:
2,1 3,2:
1,1
2,1:
2,2 2,2:
2,1 0,2:
4,1 0,3:
4,0 0,1:
4,2
2,1:
2,2 1,0:
3,3 1,1:
3,2 0,0:
4,3一共有14步完成
第3种方法:
4,3:
0,0 3,2:
1,1 4,2:
0,1 2,2:
2,1 3,2:
1,1
2,1:
2,2 2,2:
2,1 0,2:
4,1 0,3:
4,0 0,1:
4,2
0,2:
4,1 0,0:
4,3一共有12步完成
第4种方法:
4,3:
0,0 3,2:
1,14,2:
0,1 2,2:
2,13,2:
1,1
2,2 2,2:
2,1 1,1:
3,2 2,1:
2,2 0,1:
4,2
1,1:
3,20,0:
4,3 一共有12步完成
第5种方法:
4,3:
0,0 3,2:
1,1 4,2:
0,1 2,2:
2,1 3,2:
2,2 2,2:
2,1 1,1:
3,2 2,1:
2,2 0,1:
4,2
0,2:
4,1 0,0:
4,3 一共有12步完成
第6种方法:
4,3:
0,0 3,2:
1,1 4,2:
0,1 2,2:
2,1 3,2:
1,1
2,1:
2,2 2,2:
2,1 1,1:
3,2 2,1:
2,2 1,0:
3,3
3,2 0,1:
4,20,2:
4,1 0,0:
4,3 一共有14步完成
第7种方法:
4,3:
0,0 3,2:
1,1 4,2:
0,1 2,2:
2,1 3,2:
2,1:
2,2 2,2:
2,1 1,1:
3,2 2,1:
2,2 1,0:
3,3
1,1:
3,2 0,0:
4,3 一共有12步完成
第8种方法:
0,0 3,2:
1,1 4,2:
0,1 4,0:
0,34,1:
0,2
2,1:
2,2 2,2:
2,1 0,2:
4,1 0,3:
4,0 0,1:
4,2
1,1:
3,20,0:
4,3 一共有12步完成
第9种方法:
0,0 3,2:
1,1 4,2:
0,1 4,0:
0,3 4,1:
0,2
2,2 2,2:
2,1 0,2:
4,1 0,3:
4,0 0,1:
2,2 1,0:
3,3 1,1:
3,2 0,0:
4,3 一共有14步完成
第10种方法:
0,0 3,2:
1,1 4,2:
0,1 4,0:
0,3 4,1:
0,2
2,2 2,2:
2,1 0,2:
4,1 0,3:
4,0 0,1:
0,2:
4,1 0,0:
第11种方法:
0,0 3,2:
1,1 4,2:
0,1 4,0:
0,3 4,1:
2,2 2,2:
2,1 1,1:
3,2 2,1:
2,20,1:
1,1:
3,2 0,0:
4,3 一共有12步完成
第12种方法:
4,3:
0,0 3,2:
1,1 4,2:
0,1 4,0:
0,3 4,1:
0,2
2,22,2:
2,11,1:
3,2 2,1:
2,2 0,1:
0,2:
4,1 0,0:
4,3 一共有12步完成
第13种方法:
0,0 3,2:
1,1 4,2:
0,1 4,0:
0,3 4,1:
2,1:
2,2 2,2:
2,1 1,1:
3,2 2,1:
2,2 1,0:
3,3
3,2 0,1:
4,2 0,2:
4,10,0:
4,3 一共有14步完成
第14种方法:
0,0 3,2:
1,1 4,2:
0,1 4,0:
0,3 4,1:
2,2 2,2:
2,1 1,1:
3,2 2,1:
2,2 1,0:
3,3
1,1:
3,2 0,0:
4,3 一共有12步完成
第15种方法:
0,0 3,2:
1,1 3,3:
1,0 2,2:
2,1 3,2:
2,1:
2,2 2,2:
2,1 0,2:
4,1 0,3:
4,0 0,1:
1,1:
3,20,0:
4,3 一共有12步完成
第16种方法:
0,0 3,2:
1,1 3,3:
1,0 2,2:
2,1 3,2:
2,22,2:
2,1 0,2:
4,1 0,3:
4,0 0,1:
4,2
2,2 1,0:
3,3 1,1:
3,2 0,0:
4,3 一共有14步完成
第17种方法:
1,1 3,3:
1,0 2,2:
2,1 3,2:
2,2 2,2:
2,10,2:
4,1 0,3:
4,0 0,1:
0,2:
4,1 0,0:
4,3 一共有12步完成
第18种方法:
0,0 3,2:
1,1 3,3:
1,0 2,2:
2,1 3,2:
2,2 2,2:
2,1 1,1:
3,2 2,1:
2,2 0,1:
3,2 0,0:
4,3 一共有12步完成
第19种方法:
0,0 3,2:
1,1 3,3:
1,0 2,2:
2,13,2:
2,2 2,2:
2,1 1,1:
3,2 2,1:
2,2 0,1:
4,1 0,0:
4,3 一共有12步完成
第20种方法:
4,3:
0,0 3,2:
1,1 3,3:
1,0 2,2:
2,13,2:
2,2 2,2:
2,11,1:
3,22,1:
2,2 1,0:
3,2 0,1:
4,2 0,2:
4,10,0:
4,3一共有14步完成
第21种方法:
0,0 3,2:
1,13,3:
1,0 2,2:
2,1 3,2:
2,2 2,2:
2,1 1,1:
3,2 2,1:
2,2 1,0:
3,3
1,1:
3,2 0,0:
4,3 一共有12步完成
第22种方法:
0,0 3,2:
1,1 3,3:
1,0 2,2:
2,1 4,2:
0,1
4,0:
0,3 4,1:
0,2 2,1:
2,22,2:
2,1 0,2:
4,1
0,3:
4,0 0,1:
4,2 1,1:
3,2 0,0:
4,3 一共有14步完成
第23种方法:
4,3:
0,0 3,2:
1,1 3,3:
1,0 2,2:
2,1 4,2:
0,1
4,0:
0,3 4,1:
0,2 2,1:
2,2 2,2:
2,10,2:
4,1
0,3:
4,0 0,1:
4,2 2,1:
2,2 1,0:
3,3 1,1:
3,2
0,0:
4,3 一共有16步完成
第24种方法:
0,0 3,2:
1,02,2:
2,1 4,2:
4,0:
0,3 4,1:
0,2 2,1:
2,2 2,2:
2,1 0,2:
4,1
0,3:
4,0 0,1:
4,2 0,2:
4,10,0:
4,3 一共有14步完成
第25种方法:
0,0 3,2:
1,1 3,3:
1,0 2,2:
2,14,2:
0,1
4,0:
0,3 4,1:
0,2 2,1:
2,1 1,1:
3,2
2,2 0,1:
4,21,1:
3,20,0:
4,3一共有14步完成
第26种方法:
0,03,2:
1,1 3,3:
1,0 2,2:
2,1 4,2:
0,1
4,0:
0,3 4,1:
0,2 2,1:
2,2 2,2:
2,1 1,1:
3,2
2,1:
2,2 0,1:
4,2 0,2:
4,1 0,0:
4,3 一共有14步完成
第27种方法:
1,1 3,3:
1,0 2,2:
2,1 4,2:
0,1
4,0:
0,34,1:
0,2 2,1:
2,2 2,2:
2,1 1,1:
3,2
2,1:
2,21,0:
3,3 1,1:
3,2 0,1:
4,2 0,2:
4,1
4,3 一共有16步完成
第28种方法:
0,0 3,2:
1,1 3,3:
1,0 2,2:
2,1 4,2:
4,0:
0,3 4,1:
0,2 2,1:
2,2 2,2:
2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数学 建模 研究 商人 过河 问题