数学建模作业(商人过河问题)
更新时间:2023-12-04 07:19:01 阅读量: 教育文库 文档下载
数学建模作业(四)——商人过河问题 一. 问题描述
有四名商人各带一名仆人过河,但船最多能载二人,商人已获得仆人的阴谋:在河的任一岸,只要仆人数超过商人数,仆人会将商人杀死并窃取财物且安排如何乘船的权力掌握在商人手中。试为商人制定一个安全过河的方案。
二.解决方案
用递归的源程序如下:
开始时商人,强盗所在的河的这边设为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 <=3&&b <=3&&c> =0&&d> =0&&c <=3&&d <=3&&a+c==3&&b+d==3) {
switch(n) {
case 1: {
if(a==3) {
Push(a,b,n); return 1; }
else if(a==0) {
Push(a,b,n); return 1; }
else if(a==b) {
Push(a,b,n); return 1; }
else return 0; }
case 0: {
if(a==3) {
Push(a,b,n); return 1; }
else if(a==0) {
Push(a,b,n); return 1; }
else if(a> =b) {
Push(a,b,n); return 1; }
else return 0; } } }
else return 0; }
int Duhe(int a,int b,int n) /*递归法解决商人渡河问题,如果这一个状态符合*/
{ /*则判断下一个状态,直至问题解决*/
if(a==0&&b==0) return 1;
if(n==0) /*判断0状态时,商匪状态是否符合要求*/ {
if(judge(a-1,b-1,4-a,4-b,1)) {
if(Duhe(a-1,b-1,1)==1) return 1; }
if(judge(a,b-2,3-a,5-b,1)) {
if(Duhe(a,b-2,1)==1) return 1; }
if(judge(a-2,b,5-a,3-b,1)) {
if(Duhe(a-2,b,1)==1) return 1;
}
if(judge(a-1,b,4-a,3-b,1)) {
if(Duhe(a-1,b,1)==1) return 1; }
if(judge(a,b-1,3-a,4-b,1)) {
if(Duhe(a,b-1,1)==1) return 1; } else {
Pop(0); return 0; } }
if(n==1) /*判断0状态时,商匪状态是否符合要求*/ {
if(judge(a+1,b+1,2-a,2-b,0)) {
if(Duhe(a+1,b+1,0)==1) return 1; }
if(judge(a,b+2,3-a,1-b,0)) {
if(Duhe(a,b+2,0)==1) return 1; }
if(judge(a+2,b,1-a,3-b,0)) {
if(Duhe(a+2,b,0)==1) return 1; }
if(judge(a+1,b,2-a,3-b,0)) {
if(Duhe(a+1,b,0)==1) return 1; }
if(judge(a,b+1,3-a,2-b,0))
{
if(Duhe(a,b+1,0)==1) return 1; } else {
Pop(1); return 0; } }
return 0; }
main() {
link pointer; Push(3,3,0); Duhe(3,3,0);
pointer=PPointer1; while(pointer!=NULL) {
printf( \state);
pointer=pointer-> next; }
getch(); }
正在阅读:
数学建模作业(商人过河问题)12-04
论中国商标法的不足与完善03-16
第十二章 财政税收法06-05
初中历史总复习提纲(全6册)03-31
第七章 电瓶车运输施工程序04-06
经济法案例复习10-25
假如我是马良作文开头07-03
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 数学建模
- 过河
- 商人
- 作业
- 问题
- 梁小民《西方经济学 第二版》第四章课后习题答案
- 重庆市巩固退耕还林成果专项工程管理办法
- 1.本科生毕业论文模板-中文模板(理工科版本)
- 度米作文汇编之2013年12月新东方英语四级作文预测美丽定义
- 马迹山港二期工程新围堤爆破挤淤方案可行性初步分析
- 上海版牛津英语五年级上册M3U1课堂练习
- 关于印发《西南大学学术道德行为规范及实施办法》的通知西校〔2014〕410号
- 高校多媒体技术应用存在的问题及对策研究
- 福师1203考试批次《中国传统文化》复习题及参考答案
- 关于法家与儒家对君民关系的论述
- 大学物理答案1
- 2019最新苏科版九年级物理下册教案15、4 家庭安全用电
- 2019年部编人教版八年级下册《道德与法治》必背知识点精编 - 图文
- 审计学原理实务题练习题-及答案(doc-27页)
- 金属材料学复习思考题及答案
- 俱乐部简介 - 图文
- 消费者行为学重点
- 国家学生体质健康标准登记卡
- 《汽车检测诊断技术与设备》习题答案
- 土地用途规划分类与土地利用现状分类对应关系表