只有一艘船,三个商人三个仆人过河,每一次船仅且能坐1~2个人,而且任何一边河岸上仆人比商人多的时候,仆人会杀人越货。

这是一个很经典的过河问题。题解:
#允许状态集合,例num=3
#S={(x,y)|x=0,y=0,1,2,3;x=3,y=0,1,2,3;x=y=1,2} x是此岸的商人数,y是此岸的仆人数
#允许决策集合,例boat_limit=2
#D={(u,v)|1<=u+v<=2,u,v=0,1,2} u是撘载的商人数,v是搭载的仆人数
num=3
boat_limit=2
temp=[]
for i in range(0,num+1):
if i0 or inum:
for j in range(0,num+1):
temp.append((i,j))
else:
temp.append((i,i))
S=set(temp)
D=[]
for u in range(0,boat_limit+1):
for v in range(0,boat_limit+1):
if u+v>=1 and u+v<=boat_limit :
D.append((u,v))
start=(num,num)
end=(0,0)
queue=[]
queue.append((0,start)) #前面的元素如果是0,说明是船在此岸,是1,说明船在对岸
step_dict={}
flag=0
finish=[]
while len(queue)!=0:
q_pop=queue.pop(0)
if q_pop[0]0:
for x in D:
temp_s=(q_pop[1][0]-x[0],q_pop[1][1]-x[1])
if temp_s not in S:
continue
if (1,temp_s) in step_dict:
continue
queue.append((1,temp_s))
step_dict[(1,temp_s)]=q_pop
if temp_send:
flag=1
finish=(1,temp_s)
break
else:
for x in D:
temp_s=(q_pop[1][0]+x[0],q_pop[1][1]+x[1])
if temp_s not in S:
continue
if (0,temp_s) in step_dict:
continue
queue.append((0,temp_s))
step_dict[(0,temp_s)]=q_pop
if flag= =1:
break
if flag= =1:
print(‘该问题有解!最短路径:’)
path=[]
path.append(finish)
while path[-1]!=(0,start):
path.append(step_dict[path[-1]])
path.reverse()
real_path=list(map(str,path))
for i in range(len(real_path)):
if i!=len(real_path)-1:
print(real_path[i] + ‘->’)
else:
print(real_path[i])
else:
print(‘该问题无解’)

run的结果:

该问题有解!最短路径:
(0, (3, 3))->
(1, (3, 1))->
(0, (3, 2))->
(1, (3, 0))->
(0, (3, 1))->
(1, (1, 1))->
(0, (2, 2))->
(1, (0, 2))->
(0, (0, 3))->
(1, (0, 1))->
(0, (0, 2))->
(1, (0, 0))

python解决过河问题相关推荐

  1. *python解决狼羊菜过河问题

    python解决狼羊菜过河问题 A岸有菜,羊,狼,农夫农夫必须将他们都送到B岸每次只能送一个,在保证他们不会被吃的前提下,完成任务,并得出步骤. 代码: A=[["狼",1],[& ...

  2. 高德API+Python解决租房问题

    项目简介:编写Python脚本爬取某租房网站的房源信息,利用高德的 js API 在地图上标出房源地点,划出距离工作地点1小时内可到达的范围,附上公交路径规划功能查看不同路径的用时. 本教程由ekCi ...

  3. Python版本的数据结构书_《用Python解决数据结构与算法问题》

    源于经典 数据结构作为计算机从业人员的必备基础,Java, c 之类的语言有很多这方面的书籍,Python 相对较少, 其中比较著名的一本 problem-solving-with-algorithm ...

  4. Python解决The truth value of a Series is ambiguous.md

    Python解决The truth value of a Series is ambiguous.md import pandas as pd data = pd.read_csv('x.csv') ...

  5. python计算学生平均年龄_CodeSalt | Python解决按学生年龄排序的实际问题

    Python解决按学生年龄排序的实际问题 问题:定义一个Class:包含姓名name.性别gender.年龄age,需要按年龄给学生排序. 输入:包含学生对象的List. 输出:按照年龄age进行排序 ...

  6. 用 python 解决汉诺塔问题并附带演示过程

    用 python 解决汉诺塔问题并附带演示过程 参考文章: (1)用 python 解决汉诺塔问题并附带演示过程 (2)https://www.cnblogs.com/shinawear/p/1061 ...

  7. python解决组合问题

    python解决组合问题 参考文章: (1)python解决组合问题 (2)https://www.cnblogs.com/vipchenwei/p/7147488.html (3)https://w ...

  8. python解决鸡兔同笼问题

    python解决鸡兔同笼问题 参考文章: (1)python解决鸡兔同笼问题 (2)https://www.cnblogs.com/xiaolu915/p/10587499.html 备忘一下.

  9. Python解决八皇后问题

    Python解决八皇后问题 参考文章: (1)Python解决八皇后问题 (2)https://www.cnblogs.com/littleseven/p/5362791.html 备忘一下.

最新文章

  1. Node.js 官方Path模块简介
  2. Qt Creator创建Qt Quick项目
  3. 验证哥德巴赫猜想:任何一个大于6的偶数均可表示为2个素数之和
  4. 博客园的编辑器毛病真多.....
  5. 如何限制浏览器使用_如何使用浪涌电流限制器NTC(一)
  6. GTK+图形化应用程序开发学习笔记(五)—组装盒、组合表、固定容器构件
  7. 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 权限管理
  8. Windows下命令(bat可用)
  9. 性能测试场景设计之用户启停设置
  10. oracle判断字符串以什么开头_oracle存储过程 判断字符串开头
  11. oracle的pl sql教程,Oracle PL SQL从入门到精通_IT教程网
  12. 如何测试webservice接口
  13. bzoj 1984: 月下“毛景树”
  14. WPS 关闭热点推送通知
  15. 一般期刊发表要求如何掌握
  16. #Java学习#习题一
  17. html使用第三方标签,不使用第三方框架获取html页面某个标签的某个属性值
  18. CUDA实例系列一: 矩阵乘法优化
  19. f烽火ExMobi,移动应用平台的互联网思维
  20. R数据分析:跟随top期刊手把手教你做一个临床预测模型

热门文章

  1. 什么是双眼皮修复原则
  2. http://bbs.duowan.com/forum.php,多玩论坛宣告关闭 国内游戏社区又少一个
  3. 高级php面试题及答案,高级php面试题及部分答案
  4. 测试用例的设计方法——八大要素
  5. 勇攀监控高峰 | EMonitor 之根因分析
  6. mapbox 添加geojson图层实现属性查询、高亮、地图手势变化等功能
  7. eMMC编程基础 -(二)eMMC基础介绍
  8. java-配置代理访问外网谷歌苹果外网
  9. php sql注入教程,SQL注入
  10. java getclass() 继承_【java】继承和super.getClass()