|
发表于 2016-6-12 14:23
|
显示全部楼层
本楼为最佳答案
递归- Dim dic, k&, s2$
- Sub test() 'by kagawa 2016/6/12
- Dim ar, i&, s1$
- s1 = [a2]: s2 = [b2] '设置起点、终点
- [d1].CurrentRegion.Offset(1) = "" '清空输出区域
-
- ar = [a4].CurrentRegion '读取路径关系表
- Set dic = CreateObject("Scripting.Dictionary")
- For i = 2 To UBound(ar)
- dic(ar(i, 1)) = dic(ar(i, 1)) & "," & ar(i, 2) '路径关系写入字典
- Next
- k = 1: Call dg(s1, s1) '调用递归
- MsgBox k - 1
- End Sub
- Sub dg(s$, t$) 's为历史路径记录,t为当前路径节点
- Dim sr, i&, t2$
- sr = Split(dic(t), ",") '读取字典中当前节点的有效子节点路径关系
- For i = 1 To UBound(sr) '遍历有效子节点
- t2 = sr(i) '读取子节点
- If t2 = s2 Then '如果已到达终点
- k = k + 1: Cells(k, 4) = s & t2: Exit Sub '则输出该路径后结束本次递归
- Else
- If InStr(s, t2) = 0 Then Call dg(s & t2, t2) '如果子节点未曾用过则进入下一层递归搜索
- End If
- Next
- End Sub
复制代码 其中,检查子节点是否已被利用过,这个很关键。 If InStr(s, t2) = 0 |
评分
-
查看全部评分
|