|
楼主 |
发表于 2016-6-12 15:59
|
显示全部楼层
本帖最后由 爱疯 于 2016-6-12 16:34 编辑
香川群子 发表于 2016-6-12 14:23
递归其中,检查子节点是否已被利用过,这个很关键。 If InStr(s, t2) = 0
'http://www.excelpx.com/thread-418810-1-1.html 10楼
Dim dic, k&, destination
Sub test() 'by kagawa 2016/6/12
Dim ar, i&, startPoint
startPoint = [a2]
destination = [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(startPoint, startPoint)
MsgBox k - 1
End Sub
Sub dg(path, startPoint)
Dim endPoints, endPoint$, i&
'获取起点的所有终点
endPoints = Split(dic(startPoint), ",")
'遍历所有终点
For i = 1 To UBound(endPoints)
'读取其中的某个终点(endPoints里面的终点也可理解为方向)
endPoint = endPoints(i)
'是不是指定终点
If endPoint = destination Then
k = k + 1: Cells(k, 4) = path & endPoint
Exit Sub
Else
'因为要获取所有路径,所以递归在for语句内部
If InStr(path, endPoint) = 0 Then
'如果路径不包含终点,就递归
Call dg(path & endPoint, endPoint)
Else
'包含,就返回
'Stop
End If
End If
Next
End Sub
谢谢群主老师!
开始没发现,10楼已经有了注释,自己就闷着去读了半天。。。。{:201:}
要改下变量名,自己才看的过来{:021:}
|
|