




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要:M 对商仆过河,一只船最多载 N 人,船上和岸上的仆人数都不能多于商人数,否则商人有危险。安排合理的渡河方案,保证商人能安全渡河。 (可利用向量,矩阵,图解等方法)一 问题提出:有 M 对商仆乘船过河,一只船最多载 N 人,由商人和仆人自己划船渡河,在河的任意一岸,一旦仆人数多于商人数,仆人就可将商人杀死,谋取利益,但是乘船渡河的主动权掌握在商人们手中,商人们如何安排渡河方案,才能安全渡河?二 假设:商人和仆人都会划船,天气很好,无大风大浪,船的质量很好,船桨足够很多次的运载商人和仆人。三 参数:1 设(x,y)是状态向量,表示任一岸的商人和仆人数,并且 x,y 分别要大于等于 0,小于等于 M。2 设(m,n)是运载向量,表示运载的商人数和仆人数,0 =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 ;bi+1=3,3-si+1;Printsi,- - - -,ci+1,- - - -,bi+1;Ifsi+1= =0,0,Break ,i,1,12程序运行结果如下:此岸船上对岸3,30,20,23,10,10,13,20,20,33,00,10,23,12,02,21,11,11,12,22,03,10,20,13,00,30,23,20,10,13,10,20,23,3可以得出经过 11 步的渡河就能达到安全渡河的目标及满足渡河的次数尽量少的条件。这 11 步的渡河方案就是上面程序运行结果中船上下面的一列。渡河的整个过程如下所示:去 2 随从 回 1 随从(3 商人 3 随从)(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 随从)(渡河成功)一 程序实现#include “stdio.h“#include “string.h“#include #include #includeusing namespace std;#include “conio.h“FILE *fp;/*设立文件指针,以便将它用于其他函数中*/struct along m,s;struct a *next;/*数组类型 a:记录各种情况下船上的商人和仆人数,m:代表商人数s:代表仆人数*/struct a *jj,head;/*head 为头指针的链表单元(船上的人数的各种情况的链表)*/int n,total=0,js=0;/*total 表示船上各种情况总数*/struct aim long m1,s1,m2,s2;int n;struct aim *back,*next;/*用于建立双向的指针链表,记入符合的情况,m1,s1 表示要过岸的商人数和仆人数;m2,s2 表示过岸了的商人数和仆人数,n 表示来回的次数*/int k1,k2;void freeit(struct aim *p)struct aim *p1=p; p1=p-back;free(p);if(p1!=NULL)p1-next=NULL;return;/*释放该单元格,并将其上的单元格的 next 指针还原*/int determ(struct aim *p) struct aim *p1=p;if(p-s1k2)return -1;/*仆人数不能超过总仆人数*/if(p-m1k1)return -1;/*商人数不能超过总商人数*/if(p-s2k2)return -1;/*对岸,同上*/if(p-m2k1)return -1;/*对岸,同上*/if(p-s1s2m1m2m1!=0)if(p-s1p-m1)return -1;if(p-m2!=0)if(p-s2p-m2)return -1;/*两岸商人数均不能小于仆人数*/while(p1!=NULL)p1=p1-back;if(p1!=NULL)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=0else return -1;/*显然如果达到条件就说明 ok 了*/return 0;/*判断函数*/int sign(int n)if(n%2=0)return -1;return 1;/*符号函数*/void copyit(struct aim *p3,struct aim *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;p3-next=NULL;p-next=p3;/*复制内容函数,将 p 中的内容写入 p3 所指向的链表单元中*/void print(struct aim *p3)struct aim *p=p3;js+;while(p-back)p=p-back;printf(“n 第%d 种方法:n“,js);fprintf(fp,“n 第%d 种方法:n“,js);int count=0;while(p) printf(“%ld,%ld%ld,%ldt“,p-m1,p-s1,p-m2,p-s2);fprintf(fp,“%ld,%ld%ld,%ldt“,p-m1,p-s1,p-m2,p-s2);p=p-next;count+;coutn);for(i=0;inext;copyit(p3,p);p3-s1-=fla-m*f;p3-m1-=fla-s*f;p3-s2+=fla-m*f;p3-m2+=fla-s*f;/*运算过程,即过河过程*/j=determ(p3);/*判断,j 记录判断结果*/if(j=-1)if(iback=NULL;p-next=NULL;p-s2=0;p-m2=0;p-n=1;/*设立初始头指针*/printf(“请输入船上最多能乘多少人n“);fprintf(fp,“请输入船上的人数n“);scanf(“%d“,fprintf(fp,“n%dn“,n);flag=for(e=0;e0jj-s=f;flag-next=jj;jj-next=NULL;flag=jj;/*/printf(“照下面的格式输入商人和仆人
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中医药拉丁语试题及答案
- 中医学眩晕试题及答案
- 中医思维方法试题及答案
- 期权考试题及答案
- 配电题库及答案解析
- 2025年射频识别(RFID)技术在工业互联网平台下的设备状态监测与预警研究报告
- lazada培训题目及答案
- 计量工基础试题及答案
- 2025年国开电大国际私法论述案例题题库含答案
- 人工智能训练师(5级)操作技能复习题及答案
- 巡察整改培训课件
- 肢体无力护理查房
- SPD物资管理制度
- 反假货币管理培训课件
- 厂区安全警报设备管理制度
- 云南辅警笔试题目及答案
- GA 68-2024警用防刺服
- T/CCIAS 009-2023减盐酱油
- 电缆敷设过程中的常见质量问题与防治措施
- 代为司法拍卖协议书
- 驾驶员安全教育培训课件
评论
0/150
提交评论