ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

   
EH云课堂-专业的职场技能充电站 Excel转在线管理系统,怎么做看这里 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 高效办公必会的Office实战技巧 免费下载Excel行业应用视频
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
楼主: 蓝桥玄霜

[Excel 程序开发] 【已总结】[第119期]假如你是无人驾驶车上的电脑,你想好了怎么走吗?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-2-28 11:38 | 显示全部楼层
challenge24 发表于 2018-2-17 22:36
好复杂啊,有没有人讲讲思路?

思路就是把从起点开始到所有点的所有的路径和距离都列出来
然后把终点是B的挑出来,最后把距离最短的挑出来

列出所有路径的过程需要使用到递归(有些答案用字典,我没仔细看过)

TA的精华主题

TA的得分主题

发表于 2018-11-26 09:44 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-3-26 22:40 | 显示全部楼层
老师,帮忙看下我帖子上的问题能不能解决,谢谢啦!

TA的精华主题

TA的得分主题

发表于 2019-4-7 13:22 | 显示全部楼层
学了一周才勉强搞明白,练习一个



  1. Sub car()
  2.     Dim d, Ar, Br
  3.     Set d = CreateObject("scripting.dictionary")
  4.     Ks$ = Sheet1.[a2]:  Js$ = Sheet1.[b2] '开始点,结束点
  5.     Ar = Sheets("题目").[a2:c13]
  6.     d(Ks) = ""
  7.     For i% = 1 To UBound(Ar) '顶点和顶点间距离存入字典
  8.         d(Ar(i, 1)) = "": d(Ar(i, 2)) = ""
  9.         d(Ar(i, 1) & "-" & Ar(i, 2)) = Ar(i, 3)
  10.         d(Ar(i, 2) & "-" & Ar(i, 1)) = Ar(i, 3)
  11.     Next
  12.     d.Remove (Js): d(Js) = ""
  13.     Br = Filter(d.keys, "-", False) '开始点为第一个,结束点为最后一个的所有顶点
  14.     n = UBound(Br) '顶点数量
  15.     ReDim JL%(n): Path = JL '定义距离结果数组,和路径数组
  16.     ReDim T(n) As Boolean
  17.     For i = 0 To n
  18.         x$ = Ks & "-" & Br(i)
  19.         If d.exists(x) Then JL(i) = d(x) Else JL(i) = IIf(Br(i) = Ks, 0, 9999)
  20.     Next i
  21.     m% = 0: T(0) = True: Path(0) = 0
  22.         For i = 1 To n
  23.             Min = 9999
  24.                 For k% = 0 To n
  25.                     If Not T(k) And JL(k) < Min Then Min = JL(k): m = k
  26.                 Next k
  27.             T(m) = True
  28.                 For k = 0 To n
  29.                     x$ = Br(m) & "-" & Br(k)
  30.                     If d.exists(x) Then mn% = d(x) Else mn = IIf(Br(k) = Br(m), 0, 9999)
  31.                     If Not T(k) And JL(m) + mn < JL(k) Then
  32.                         JL(k) = JL(m) + mn:         Path(k) = m
  33.                     End If
  34.         Next k, i
  35.     m = n: Route = Br(n)
  36.         Do Until m = 0 '路径转化为文本
  37.             Route = Br(Path(m)) & "-" & Route
  38.             m = Path(m)
  39.         Loop
  40.     With Sheet1 '输出结果
  41.         .[c2] = JL(n)
  42.         .[d2] = Route
  43.     End With
  44. End Sub
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?免费注册

x
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关注官方微信,每天学会一个新技能

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

GMT+8, 2019-6-27 04:03 , Processed in 0.072004 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2017 Wooffice Inc.

   

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

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

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