ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
123
返回列表 发新帖
楼主: nyasen

[求助] 求助路径算法!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-5-21 17:16 | 显示全部楼层
香川群子 发表于 2015-5-21 16:57
你的递归计算结果,有些房间是被反复通过的。(同一房间进出多次)

这个应该不是合理的路径。

思路一致,只是检查是否进过房间的方法不同。
错误在没忽略起点,改1为0即可。

Dim arr()
Dim brr(1 To 100, 1 To 1) As String
Dim bi As Integer
Dim js As Integer

Sub aa()
ks = [a20]
js = [a21]
arr1 = [B2:e13]

arr = arr1
bi = 0
Call xz(ks, 1, ks)


Range("a25").Resize(bi, 1) = brr
End Sub

Sub xz(fjh, bs, jl)
'fjh房间号, bs步数, jl记录
Dim jl1 As String
For i = bs To UBound(arr, 2)
    If arr(fjh, i) = "" Then   '本房间走完
        Exit For
    ElseIf arr(fjh, i) = js Then  '到出口
        bi = bi + 1
        brr(bi, 1) = jl & "," & arr(fjh, i)
    Else    '进下一间
        fl = Split(jl, ",")
        For j = UBound(fl) To 0 Step -1
            If Val(fl(j)) = arr(fjh, i) Then Exit For
        Next
        If j < 0 Then
            jl1 = jl & "," & arr(fjh, i)
            Call xz(arr(fjh, i), 1, jl1)
        End If
    End If
Next

End Sub

TA的精华主题

TA的得分主题

发表于 2015-5-21 17:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我自己模拟增加了一个里程表。

用递归算法可知,经过城市最少的不一定是里程最短的路径。

route3.zip

20.94 KB, 下载次数: 131

TA的精华主题

TA的得分主题

发表于 2015-5-21 17:39 | 显示全部楼层
  1. Dim arr()
  2. Dim brr(1 To 100, 1 To 1) As String
  3. Dim bi As Integer
  4. Dim js As Integer

  5. Sub aa()
  6. tt = Timer
  7. ks = [a20]
  8. js = [a21]
  9. arr1 = [B2:e13]

  10. arr = arr1
  11. bi = 0
  12. 'Call xz(ks, 1, ks)

  13. ReDim abjrr(1 To UBound(arr)) As Boolean
  14. abjrr(ks) = True
  15. Call xz1(ks, 1, ks, abjrr)


  16. Range("a25").Resize(100, 1).ClearContents
  17. Range("a25").Resize(bi, 1) = brr
  18. MsgBox Timer - tt
  19. End Sub

  20. Sub xz1(fjh, bs, jl, bj)
  21. 'fjh房间号, bs步数, jl记录
  22. For i = bs To UBound(arr, 2)
  23.     If arr(fjh, i) = "" Then   '本房间走完
  24.         Exit For
  25.     ElseIf arr(fjh, i) = js Then  '到出口
  26.         bi = bi + 1
  27.         brr(bi, 1) = jl & "," & arr(fjh, i)
  28.     Else    '进下一间
  29.         If Not bj(arr(fjh, i)) Then
  30.             bj1 = bj
  31.             bj1(arr(fjh, i)) = True
  32.             Call xz1(arr(fjh, i), 1, jl & "," & arr(fjh, i), bj1)
  33.         End If
  34.     End If
  35. Next

  36. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2015-5-22 09:07 | 显示全部楼层

嗯,加入了检查房间是否已进入过的记录数组……

呵呵,这就和原来的代码有根本性的算法改变了,虽然看上去递归结构基本没变。

TA的精华主题

TA的得分主题

发表于 2018-9-6 12:30 | 显示全部楼层
香川群子 发表于 2015-5-20 09:52
字典+数组算法,循环计算得到最短路径。

香川老师,请问一下:这个迷宫路径的解题思路是什么啊?我下载了您的附件,发现计算都很好,但是我想知道你写这些代码的逻辑是什么样子的,,,能教一下我吗?非常感谢。

TA的精华主题

TA的得分主题

发表于 2018-9-8 10:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
香川群子 发表于 2015-5-20 08:37
根据楼主相邻房间表,拓扑画出各个房间的平面图:

这个平面图画得好,请问是根据什么思路设计的?有没有什么算法?

TA的精华主题

TA的得分主题

发表于 2018-9-8 10:39 | 显示全部楼层
本帖最后由 ykqrs 于 2018-9-8 10:40 编辑

捕获.JPG C:\Users\Administrator\Desktop

TA的精华主题

TA的得分主题

发表于 2018-9-8 10:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
捕获2.JPG

TA的精华主题

TA的得分主题

发表于 2018-9-8 10:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
代码老是需要审核,唉。。。。。
这个题和竞赛区的一道题类似,拿来改改就能用
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 17:30 , Processed in 0.026919 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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