# -*- 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)

数学建模——商人与随从过河问题相关推荐

  1. matlab三个商人三个随从,数学建模 商人过河

    数学建模课程作业 论文题目: 对商人过河问题的研究 指导教师:黄光辉 小组成员:黄志宇(20156260)车辆工程04班 牛凯春(20151927)电气工程05 班 文逸楚(20150382)工商管理 ...

  2. 数学建模-商人过河问题

    商人过河问题 1.问题重述 三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己划行.随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货.但是如何乘船渡河的大权掌握在商人们手中,商 ...

  3. 商人过河问题_6人过河问题_3商人3随从过河问题_python求全部解

    """ 三个商人带了三个随从准备过河,目前只有一条空船(至少需要一人划船),并且最大承重两人, 这时随从商议在河的任意一岸只要商人的数量少于随从的数量,那随从就会杀人越货 ...

  4. 数学建模学习笔记---Mooc1

    2.1状态转移模型巧用 备注:文章是作者在数学建模学习过程中,跟着西工大的MOOC视频重新实现了一下. 若有错,望指正!!! 阅读目录 2.1状态转移模型巧用 问题一:人.狼.羊.菜渡河问题 问题描述 ...

  5. 数学建模计算机软件,[计算机软件及应用]数学建模培训.ppt

    [计算机软件及应用]数学建模培训 优化模型的简单分类和求解难度 :状态转移律 :第 次渡船上的随从数 :决策 :允许决策集合 建模: :第 次渡船上的商人数 求 ,使 , 并按转移律由 到 . 建模: ...

  6. 数学建模之运筹学问题

    目录 1.引言 2.常见模型与算法 3.问题描述 4.遗传算法 5.仿真结果 1.引言 运筹学问题,包括任务规划.分配.决策,是数学建模比赛中常见的问题(参见2018年"高教杯"数 ...

  7. 【渝粤题库】陕西师范大学200411 数学建模 作业(专升本)

    <数学建模>作业 计算题1. 求差分方程 的初值解. 2. 求差分方程 的初值解. 二.1.某储蓄所每天的营业时间是上午9:00到下午5:00.根据经验,每天不同时间段所需要的服务员数量如 ...

  8. 【从零开始数学建模(1)】第一章 建立数学模型~导论

    系列文章目录 第一章 建立数学模型~导论 文章目录 ​​​​​​​​​​​ 前言 1.1 从现实对象到数学模型 1.2 数学建模的基本方法与步骤 1.3 数学模型的特点与分类 1.4 从三个建模示例来 ...

  9. 《数学建模竞赛入门与提高》读书笔记

    第1章:数学建模概述 近半个多世纪以来,数学已经走进了各大领域,而与其他学科相结合形成交叉学科,首要的关键一步就是建立研究对象的数学模型,并加以计算求解,数学建模和计算机技术在知识经济时代的作用可谓是 ...

最新文章

  1. 大连理工大学 计算机复试分数线,2020大连理工大学考研复试分数线已公布
  2. sap内表 table_LINE
  3. 如何在三年内快速成长为一名技术专家
  4. 光流 | MATLAB实现 Brox Optical Flow(代码类)
  5. 再不解决延迟不当,小心你的内存被打爆
  6. 电脑程序无法打开,开机5S后速度变慢,程序无法安装
  7. 计算机打音乐光辉岁月,光辉岁月(完美版)
  8. 虚拟环境mkvirtualenv
  9. MPC控制笔记(一)
  10. 用什么软件可以编辑pdf文件
  11. 程序员用实力把公司干倒闭了
  12. 【LeetCode - 379】电话目录管理系统
  13. 数据分析师和数据工程师的区别是什么?
  14. 社交电商快速吸粉裂变模式-全新拼团模式
  15. tedu斌-Web笔记2112-2
  16. 最受欢迎的中国 50 技术博客评选结果
  17. Word编辑公式时,公式后的序号靠下,不能再行中间显示
  18. 英语口语六级模拟测试软件,2016年11月英语六级考试口语试题模拟
  19. 关于python的开发软件pycharm设置中文(无需汉化包)
  20. python脚本windows环境下权限问题处理

热门文章

  1. win7+1080ti+cuda8.0+cudnn5.0+caffe安装
  2. 自己抽最便宜的香烟,别人会怎么看
  3. 一个CV算法工程师在技术方面的小反思
  4. 基于JPA实现的动态查询工具类
  5. Android 7.0 Launcher3的启动和加载流程分析
  6. 手握曹操出行,吉利为什么还要打造一个新的网约车平台?
  7. 揭秘苹果手机IOS系统各种微信双开方式与对比【技术科普】
  8. 用计算机做科学试验,用计算机做科学实验之引导层动画(2页)-原创力文档
  9. 20181207作业-郭恩赐
  10. 电脑重启后Mysql丢失原先的数据库