- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
商人过河问题
有n个商人k个仆人过河,船上最多有m个人,两岸上有任意一岸仆人数多于商人数商人都会死,问应如何安排才能使商人顺利过河,若不能则不打印出全过程:建议开始值=3,k=3,m=2
谢谢大虾了
#include iostream.h
void main()
{
int n,k,m; //如题目的n k m 要求n=k,m=1
int x,y,z; //xy表示每次船上的商人和仆人,z是临时变量
int i = 0; //运送次数
do
{
cout输入商人,仆人数目以及船的载客量:;
cinnkm;
if(nk || m1) //不合题目要求
cout输入不符合题目要求,请重新输入.endl;
}while(nk || m1);
if(n == k) //临界状态,商人数目和仆人数目相当,那每次运送的都一样喽
x = y = m/2;
else
{
y = m / 2; //载仆人的数目
x = m - y; //载商人的数目
}
while(n!=0 || k!=0) //只要还有人要运
{
i++;
cout第 i 次运送.endl;
if(n x)
{
n-=x;
cout本次运送商人 x 个.endl;
}
else
{
cout本次运送商人 n 个.endl;
n = 0; //商人运送完毕
}
if(k y)
{
k -=y;
cout本次运送仆人 y 个.endl;
}
else
{
cout本次运送仆人 k 个.endl;
k = 0;
}
z = x;
x = y;
y = z; //交换x y
}
return ;
}
///////////////////////
#include stdio.h
#include string.h
#include conio.h
FILE *fp;/*设立文件指针,以便将它用于其他函数中*/
struct a{
long 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-s10)return -1;/*仆人数不能为负*/
if(p-s20)return -1;/*商人数不能为负*/
if(p-m10)return -1;/*对岸,同上*/
if(p-m20)return -1;/*对岸,同上*/
if(p-m1!=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==0p-m
您可能关注的文档
最近下载
- 2025年民航招飞pat测试题及答案.doc VIP
- 阿里人才盘点实践.pptx VIP
- 唐山丰南区有关招聘职业高中、足球特色校教师简章.PDF VIP
- 新版《铁路调车作业标准》电子版.docx
- 福建农林大学金山学院《高等数学(D)》2025 - 2026学年第一学期期末试卷.docx VIP
- 贵州企业招聘:2024贵阳铝镁设计研究院有限公司秋季招聘58人笔试备考试题及答案解析.docx VIP
- 广联达BIM5D+3.5操作手册.pdf VIP
- 17 猫 课件(共29张PPT)(完整版).pptx VIP
- 投资项目投资风险分析与评估方案.docx VIP
- 05X101-2_001地下通信电缆.pdf VIP
原创力文档


文档评论(0)