ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:19.92KB ,
资源ID:9994838      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9994838.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(商人过河的数学模型及编程解决.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

商人过河的数学模型及编程解决.docx

1、商人过河的数学模型及编程解决14对商仆过河问题题目有14名商人各带一名仆人要过河,但船最多能载4人。商人已获得仆人的阴谋:在河的任意一岸,只要仆人数超过商人数,仆人会将商人杀死并窃取货物。安排如何乘船的权利权利在商人手上,试为商人制定一个安全的过河方案。一摘要n对商仆过河,一只船最多载m人,船上和岸上的仆人数都不能多于商人数,否则商人有危险。安排合理的渡河方案,保证商人能安全渡河。(可利用向量,矩阵,图解等方法)。二问题提出:有14对商仆乘船过河,一只船最多载4人,由商人和仆人自己划船渡河,在河的任意一岸,一旦仆人数多于商人数,仆人就可将商人杀死,谋取利益,但是乘船渡河的主动权掌握在商人们手中

2、,商人们如何安排渡河方案,才能安全渡河?三问题分析商仆安全渡河问题可以视为一个多步决策过程,多步决策是指决策过程难以一次完成,而是多步优化,最后获取一个全局最优方案的决策方法。对于每一步,即船由此岸驶向彼岸,或者船由彼岸驶向此岸的决策,不仅会影响到该过程的效果,而且还会影响到下一步的初始状态,从而对整个过程都会有影响。所以,在每一次过河时,就不能只从这一次过河本身考虑,还要把它看成是整个过河过程中的一个部分。在对船上的人员做决策时,要保证两岸的商人数不能少于仆人数,用最少的步伐是人员全部过河。应用状态向量和运载向量,找出状态随运载变化的规律,此问题就转化为状态在允许范围内(即安全渡河条件),确

3、定每一次该如何过河,从而达到渡河的目标。现在我们都把它们数量化:即用数学语言来表示。四模型假设与符号假设(一)模型假设商人和仆人都会划船,天气很好,无大风大浪,船的质量很好,船桨足够很多次的运载商人和仆人。(二)符号假设设(x,y)是状态向量,表示任一岸的商人和仆人数,且x,y分别要大于等于0,小于等于M。1.设(m,n)是运载向量,表示运载的商人数和仆人数,0=m=N,0=n=N,0=m+n =3, DoIfsi+1= =sm,u=1,Break ,m,l,i -1,2 ; Ifu= =0,ci+1=dj;Break ,j,1,5; Ift= =0,PrintNo,Result;Break

4、; bi+1=3,3-si+1; Printsi,- - - -,ci+1,- - - -,bi+1; Ifsi+1= =0,0,Break ,i,1,12 程序运行结果如下: 此岸船上对岸 3,30,20,2 3,10,10,1 3,20,20,3 3,00,10,2 3,12,02,2 1,11,11,1 2,22,03,1 0,20,13,0 0,30,23,2 0,10,13,1 0,20,23,3 可以得出经过11步的渡河就能达到安全渡河的目标及满足渡河的次数尽量少的条件。这11步的渡河方案就是上面程序运行结果中船上下面的一列。渡河的整个过程如下所示: 去2随从 回1随从(3商人3随

5、从)(3商人1随从) 去2随从 回1随从(3商人2随从)(3商人0随从) 去2商人 回1商人1随从(3商人1随从)(1商人1随从) 去2商人 回1随从(2商人2随从)(0商人2随从) 去2随从 回1随从(0商人3随从)(0商人1随从) 去2随从 (0商人2随从)(渡河成功)七、结果分析与检验八、模型的优缺点与改进方向九、参考文献【1】 茆诗松等 , 概率论与数理统计教程,北京:高等教育出版社,2004年。【2】 赵静,但琦,数学建模与数学实验3,北京:高等教育出版社,2008年。十、附录(一)程序/约束条件:岸上仆人不能多于商人数#include using namespace std;str

6、uct Node int nMer; int nSer; int length;class Apublic: A(); A(); void Tspt(); /过河的动作 void doLeft(int nhead,int ntail,int nlength); private: bool islegal(int nm,int ns); /判断是否满足约束条件,满足为true Node *funTspt(int nm,int ns,bool flag);/添加STEPhead可以向后延伸的节点 bool noRepeat(int nm,int ns);/没有重复返回TRUE void funsh

7、ow(int a2,int ntail); bool funLeft(Node nd,int b1,int b2,int n); void show(int s,int p2,int &top,int &count,int a); int head; int tail; int n; /商仆的对数 int nB; /船最多的载人数目 Node *STEP;A:A() free(STEP);A:A() coutn; coutnB; STEP = (Node *)malloc(sizeof(Node)*10000); memset(STEP,0,sizeof(Node)*10000); head

8、= tail = 0; STEP0.nMer = STEP0.nSer = n;int main() A a; a.Tspt(); return 0;void A:show(int s,int p2,int &top,int &count,int a) if(top = -1) return ; /已找到目标状态需,输出数据 if(top = STEPhead.length) cout* +count *endl; funshow(p,top + 1); B: top-; if(top = -1) return ;C: stop-; if(STEP(stop).length != top)/退

9、过了 stop = atop; goto B; if(funLeft(STEP(stop),ptop - 10,ptop - 11,top - 1) = false) goto C; ptop0 = STEP(stop).nMer; ptop1 = STEP(stop).nSer; show(s,p,top,count,a); return ; /在中间加入节点STEP(stop + 1) if(funLeft(STEP(stop + 1),ptop0,ptop1,top) = true)/符合条件 top+; ptop0 = STEP(stop).nMer; ptop1 = STEP(sto

10、p).nSer; show(s,p,top,count,a); return ; else /不符合条件 E: stop + 1-; if(STEP(stop + 1).length = top)/退过了,到了下一层 stop + 1 = atop + 1;D: stop-; if(STEP(stop).length != top)/退过了,到了下一层 for(int i = top; i = STEPhead.length; i+) si = ai; top-; if(top = -1) return ; goto D; if(top = 0) return ; if(funLeft(STE

11、P(stop),ptop - 10,ptop - 11,top - 1) = false) goto D; ptop0 = STEP(stop).nMer; ptop1 = STEP(stop).nSer; show(s,p,top,count,a); return ; if(funLeft(STEP(stop + 1),ptop0,ptop1,top) = false) goto E; top+; ptop0 = STEP(stop).nMer; ptop1 = STEP(stop).nSer; show(s,p,top,count,a); void A:doLeft(int nhead,i

12、nt ntail,int nlength) int a1000; int a11000; int sp10002; bool flag = false; memset(a,0xff,4000); memset(a1,0xff,4000); memset(sp,0xff,8000); if(STEPhead.length%2 = 0) flag = true; while(STEPhead.length = nlength - 1) funTspt(STEPhead.nMer,STEPhead.nSer,flag); head+; for(int i = 0; i head + 1; i+) a

13、(STEPi.length) = i; a1(STEPi.length) = i; sp00 = sp01 = n; STEPhead.nMer = STEPhead.nSer = 0; int top = 0; int count = 0; show(a1,sp,top,count,a); bool A:funLeft(Node nd,int b1,int b2,int n) bool flag = abs(nd.nMer - b1) + abs(nd.nSer - b2) 0; if(flag = false) return false; if(n%2 = 0 & b1 = nd.nMer

14、 & b2 = nd.nSer) return true; if(n%2 = 1 & b1 = nd.nMer & b2 = nd.nSer) return true; return false;void A:Tspt() Node *temp = new Node; temp = NULL; bool flag = false; while(head tail) cout此问题无解!nMer,temp-nSer,temp-length);/temp-nMer表示head delete temp;Node* A:funTspt(int nm,int ns,bool flag)/flag = t

15、rue 向对岸运输 Node *nd = NULL; int temp = 1; int tM = STEPhead.nMer; /可供运输的商人数 int tS = STEPhead.nSer; /可供运输的仆人数 if(flag = false) /向此岸运输 tM = n - STEPhead.nMer; tS = n - STEPhead.nSer; temp = -1; for(int i = 0; i tM + 1 & i nB + 1; i+)/i表示运输的商人数 for(int j = 0; j tS + 1 & j length = STEPhead.length + 1;

16、nd-nMer = head; nd-nSer = tail; return nd; tail+; STEPtail.length = STEPhead.length + 1; STEPtail.nMer = p; STEPtail.nSer = q; return nd;bool A:noRepeat(int nm,int ns) int j1 = 0; if(STEPhead.length%2 = 0) j1 = 1; for(int i = j1; i tail + 1; i+) if(STEPi.length%2 = j1 & nm = STEPi.nMer & ns = STEPi.

17、nSer) return false; return true;bool A:islegal(int nm,int ns) /商人数少于仆人数或者商人数为0 if(nm = 0) | (nm = n) | (nm = ns) return true; return false;void A:funshow(int a2,int ntail) coutendl; cout 商人数 仆人数endl; for(int i = 0; i ntail; i+) cout第i次 ai0 ai1endl; if(i != ntail - 1 & i%2 = 0) cout (abs(ai + 10 - ai0), abs(ai + 11 - ai1)endl; else if(i != ntail - 1 & i%2 = 1) cout - (abs(ai + 10 - ai0), abs(ai + 11 - ai1)endl; coutendl;

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

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