ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 香川群子

[讨论] 出个算法题,大家练练手【3个和尚和3个妖怪过河】

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2018-9-5 23:01 | 显示全部楼层
定义类做了一个,比较好理解递归。为了让初学者看懂,程序没做优化,可能有点啰嗦。结果在立即窗口查看。
  1. Option Explicit
  2. Sub main()
  3. Dim s As New Scene

  4.     s.left_bank_monks = 3 'inputbox instead
  5.     s.left_bank_monsters = 3
  6.     s.right_bank_monks = 0
  7.     s.right_bank_monsters = 0
  8.     s.boat_capacity = 2
  9.     s.boat_location = "left"
  10.     s.boat_step = Array()
  11.    
  12.     Call monks_vs_monsters(s)

  13. End Sub

  14. Sub monks_vs_monsters(current_scene)
  15.     Dim i As Long, ns
  16.    
  17.     With current_scene
  18.    
  19.         If .is_done Then
  20.             Debug.Print .result
  21.             Exit Sub
  22.         End If
  23.         
  24.         ns = .next_steps
  25.         For i = LBound(ns) To UBound(ns)
  26.             Call monks_vs_monsters(.genarate_next_scene(ns(i)))
  27.         Next i
  28.         
  29.     End With
  30.    
  31.     Set current_scene = Nothing
  32.    
  33. End Sub

复制代码

monk and monster.zip

25.23 KB, 下载次数: 17

TA的精华主题

TA的得分主题

发表于 2018-9-6 06:43 | 显示全部楼层
本帖最后由 yipzx 于 2018-9-6 06:46 编辑

昨天少写一初始条件,补上,年纪大了。在立即窗口看答案。答案格式为,过河和尚数-过后妖怪数,每一步后“,”号隔开。最少就4种解法。

monk and monster - ok.zip

25.47 KB, 下载次数: 32

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-9-6 08:19 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-6 08:25 | 显示全部楼层
本帖最后由 香川群子 于 2018-9-6 08:27 编辑
zopey 发表于 2018-9-5 17:05
'过河方案brr() 有49种,对应返回方案也是49种。

Sub 按钮1_Click()

你这个49方案,是啥意思?

已经脱离题目要求了吧。

再用数学语言描述一下:
起始状态3,3,0,0,要求经过最少步数达到 0,0,3,3状态,
渡河规则为0<x+y<=2 (每次渡河最多2位,最少1位)
另有限制条件 x=0 or  (x>0 and x>=y)  (如果和尚数x不为0时需满足x>=y 即和尚数>=妖怪数)
求不同路径的数量。(过程不同的路径数)

m=3
n=3
时,只有4个不同的最短路径。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-6 08:29 | 显示全部楼层
1234vba 发表于 2018-9-6 08:19
第一时间收藏帖子。要学习的

有人关注,有人想要学习,

那么大家就会讨论下去、逐步揭开知识点。

我会在最后做总结,把递归解题的算法过程交代清楚。

TA的精华主题

TA的得分主题

发表于 2018-9-6 08:51 | 显示全部楼层
香川群子 发表于 2018-9-6 08:29
有人关注,有人想要学习,

那么大家就会讨论下去、逐步揭开知识点。

恩、、

期待老师后面的揭秘

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-6 09:11 | 显示全部楼层
本帖最后由 香川群子 于 2018-9-6 09:14 编辑
yipzx 发表于 2018-9-6 06:43
昨天少写一初始条件,补上,年纪大了。在立即窗口看答案。答案格式为,过河和尚数-过后妖怪数,每一步后“ ...

代码写的很规范。

算法基本没问题了,但是我在检查m=3,n=2时发现,

left-1-1,right-0-1,left-1-1,right-1-0,left-1-1,right-0-1,left-1-0,right-0-1,left-0-2
left-1-1,right-0-1,left-1-1,right-1-0,left-1-1,right-0-1,left-1-1

left-1-1,right-1-0,left-2-0,right-1-0,left-1-1,right-0-1,left-1-0,right-0-1,left-0-2
left-1-1,right-1-0,left-2-0,right-1-0,left-1-1,right-0-1,left-1-1

这4个解,其实上面一个是下面解的冗余步数(可以蓝色一步完成的,却多走了几步)

如果按照最短路径的要求,这是不是只能算2组解?哈哈。

TA的精华主题

TA的得分主题

发表于 2018-9-6 09:16 | 显示全部楼层
香川群子 发表于 2018-9-6 08:25
你这个49方案,是啥意思?

已经脱离题目要求了吧。

为了求路径,我想先制作邻接表,如下图(只显示一半):
按乘船方案的限制 ,m=3 n=3 过河及返回 各有 有49 种可能。

tt21.JPG

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-6 09:19 | 显示全部楼层
zopey 发表于 2018-9-6 09:16
为了求路径,我想先制作邻接表,如下图(只显示一半):
按乘船方案的限制 ,m=3 n=3 过河及返回 各有  ...

哦,那就是最终路径结果还没整理出来,代码需要继续的意思。

TA的精华主题

TA的得分主题

发表于 2018-9-6 09:53 来自手机 | 显示全部楼层
香川群子 发表于 2018-9-6 09:11
代码写的很规范。

算法基本没问题了,但是我在检查m=3,n=2时发现,

没错,再加个优化条件,记录最短步数,超过了直接剪枝就可以了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-26 11:45 , Processed in 0.037343 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表