数学建模——商人与随从过河问题
# -*- coding: utf-8 -*-"""
①判断当前状态是否合理- 得到答案输出
②合理进行 运输适用于全部
"""##初始条件,
U = input("请输入小船容量:\n")# 小船容量
x0 = input("请输入商人数:\n")# 商人数
x0 = int(x0)
U = int(U)
y0 = x0 #随从
sk0 = [x0, y0] #初始sk状态#记录过程
progress = []
#避免死循环 的标记集合
vis = set()cnt = 0
ans_list = []def getD(x):"""获取容量为x 的D集合"""D = []for i in range(x+1):for j in range(x+1):if i+j!=0 and j+i<=x:D.append([i,j])return Ddef valid_sk(sk):"""判断当前状态sk是否合理"""if sk[0] > x0 or sk[1] > x0 or sk[0] < 0 or sk[1] < 0:return Falseif sk[0] == 0 or sk[0] == x0:return Trueif sk[0] == sk[1]:return Truereturn Falsedef accord_ans():"""记录答案"""global cntcnt+=1ans_list.append((len(progress)+1,progress[0:]+[[0,0]]))returndef DFS(sk, k, D):"""搜索答案"""global progress,visif not valid_sk(sk):returnelif len(progress) >1:# 除去死循环, 无用功if (k%2, sk[0], sk[1]) in vis: returnif sk[0] ==0 and sk[1] == 0:#记录答案accord_ans()return#print(k, sk)progress.append(sk[:])# 加入该状态vis.add((k%2, sk[0], sk[1]))#标记for dk in D:if k%2 == 0:sk[0]-=dk[0]sk[1]-=dk[1]DFS(sk, k+1, D)sk[0]+=dk[0]sk[1]+=dk[1]else:sk[0]+=dk[0]sk[1]+=dk[1]DFS(sk, k+1, D)sk[0]-=dk[0]sk[1]-=dk[1]progress.pop()vis.remove((k%2, sk[0], sk[1]))if __name__ == "__main__":#获取D集合D = getD(U)#输出答案print("答案:")DFS(sk0, 0, D)ans_list.sort(key=lambda x:x[0])for i, j in ans_list:print("摆渡次数", i, ", sk的状态", j)print("\n答案个数:",cnt)if cnt!= 0:min1 = ans_list[0][0]min_cnt = 0for i, j in ans_list:if i == min1:min_cnt+=1print("最优解的摆渡次数", min1)print("最优解有", min_cnt)
数学建模——商人与随从过河问题相关推荐
- matlab三个商人三个随从,数学建模 商人过河
数学建模课程作业 论文题目: 对商人过河问题的研究 指导教师:黄光辉 小组成员:黄志宇(20156260)车辆工程04班 牛凯春(20151927)电气工程05 班 文逸楚(20150382)工商管理 ...
- 数学建模-商人过河问题
商人过河问题 1.问题重述 三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己划行.随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货.但是如何乘船渡河的大权掌握在商人们手中,商 ...
- 商人过河问题_6人过河问题_3商人3随从过河问题_python求全部解
""" 三个商人带了三个随从准备过河,目前只有一条空船(至少需要一人划船),并且最大承重两人, 这时随从商议在河的任意一岸只要商人的数量少于随从的数量,那随从就会杀人越货 ...
- 数学建模学习笔记---Mooc1
2.1状态转移模型巧用 备注:文章是作者在数学建模学习过程中,跟着西工大的MOOC视频重新实现了一下. 若有错,望指正!!! 阅读目录 2.1状态转移模型巧用 问题一:人.狼.羊.菜渡河问题 问题描述 ...
- 数学建模计算机软件,[计算机软件及应用]数学建模培训.ppt
[计算机软件及应用]数学建模培训 优化模型的简单分类和求解难度 :状态转移律 :第 次渡船上的随从数 :决策 :允许决策集合 建模: :第 次渡船上的商人数 求 ,使 , 并按转移律由 到 . 建模: ...
- 数学建模之运筹学问题
目录 1.引言 2.常见模型与算法 3.问题描述 4.遗传算法 5.仿真结果 1.引言 运筹学问题,包括任务规划.分配.决策,是数学建模比赛中常见的问题(参见2018年"高教杯"数 ...
- 【渝粤题库】陕西师范大学200411 数学建模 作业(专升本)
<数学建模>作业 计算题1. 求差分方程 的初值解. 2. 求差分方程 的初值解. 二.1.某储蓄所每天的营业时间是上午9:00到下午5:00.根据经验,每天不同时间段所需要的服务员数量如 ...
- 【从零开始数学建模(1)】第一章 建立数学模型~导论
系列文章目录 第一章 建立数学模型~导论 文章目录 前言 1.1 从现实对象到数学模型 1.2 数学建模的基本方法与步骤 1.3 数学模型的特点与分类 1.4 从三个建模示例来 ...
- 《数学建模竞赛入门与提高》读书笔记
第1章:数学建模概述 近半个多世纪以来,数学已经走进了各大领域,而与其他学科相结合形成交叉学科,首要的关键一步就是建立研究对象的数学模型,并加以计算求解,数学建模和计算机技术在知识经济时代的作用可谓是 ...
最新文章
- 大连理工大学 计算机复试分数线,2020大连理工大学考研复试分数线已公布
- sap内表 table_LINE
- 如何在三年内快速成长为一名技术专家
- 光流 | MATLAB实现 Brox Optical Flow(代码类)
- 再不解决延迟不当,小心你的内存被打爆
- 电脑程序无法打开,开机5S后速度变慢,程序无法安装
- 计算机打音乐光辉岁月,光辉岁月(完美版)
- 虚拟环境mkvirtualenv
- MPC控制笔记(一)
- 用什么软件可以编辑pdf文件
- 程序员用实力把公司干倒闭了
- 【LeetCode - 379】电话目录管理系统
- 数据分析师和数据工程师的区别是什么?
- 社交电商快速吸粉裂变模式-全新拼团模式
- tedu斌-Web笔记2112-2
- 最受欢迎的中国 50 技术博客评选结果
- Word编辑公式时,公式后的序号靠下,不能再行中间显示
- 英语口语六级模拟测试软件,2016年11月英语六级考试口语试题模拟
- 关于python的开发软件pycharm设置中文(无需汉化包)
- python脚本windows环境下权限问题处理