Function Sway(start, ends)Dim dis, st, ed, i, J, pos As Integer
Dim nStep As Integer
ReDim disNodeInfo(UBound(Map), 2) As Integer
Dim spos, dpos, dd As Integer
Dim nodeName, tmpStr, tmp, path As String
ReDim S(UBound(Map)) As Integerdis = 0
st = 0
ed = 0
i = 0
J = 0
pos = 0
nStep = 0
spos = 0
dpos = 0
dd = 0
noname = ""
tmpStr = ""
path = ""For i = 0 To UBound(Map) S(i) = 0
disNodeInfo(i, 0) = 511
disNodeInfo(i, 1) = -1
dpos = InStr(Map(i), ",")
nodeName = Mid(Map(i), 1, dpos - 1)
If 0 = StrComp(start, nodeName) Then st = i
If 0 = StrComp(ends, nodeName) Then ed = i
Next ipos = ed
nStep = 0S(ed) = 1
disNodeInfo(ed, 0) = 0
disNodeInfo(ed, 1) = -1Do While (st <> pos And nStep < UBound(Map))If IsStop = True Then
Exit Function
End If
OutStr ("正在计算......") For i = 0 To UBound(Map) If IsStop = True Then
Exit Function
End If
If (1 = S(i) And nStep = disNodeInfo(i, 0)) Then
pos = i
spos = 0
tmpStr = Map(i) + ","
dpos = InStr(tmpStr, ",")
spos = dpos
dpos = InStr(spos + 1, tmpStr, ",")
Do While (dpos > 0)
If IsStop = True Then
Exit Function
End If tmp = Mid(tmpStr, spos + 1, dpos - spos - 1)
For J = 0 To UBound(Map)
If IsStop = True Then
Exit Function
End If dd = InStr(Map(J), ",")
nodeName = Mid(Map(J), 1, dd - 1)
If 0 = StrComp(tmp, nodeName) Then
Exit For
End If
Next J
If (1 <> S(J)) Then
S(J) = 1
disNodeInfo(J, 0) = nStep + 1
disNodeInfo(J, 1) = pos
Else
If disNodeInfo(J, 0) + 1 < nStep Then
disNodeInfo(pos, 0) = disNodeInfo(J, 0) + 1
disNodeInfo(pos, 1) = J
End If
End If
spos = dpos
dpos = InStr(spos + 1, tmpStr, ",")
Loop
End If
Next i
nStep = nStep + 1
Loop
dpos = InStr(Map(st), ",")
nodeName = Mid(Map(st), 1, dpos - 1)
pos = st
path = ""
Do While (pos <> ed And pos >= 0)
If IsStop = True Then
Exit Function
End If
dpos = InStr(Map(pos), ",")
nodeName = Mid(Map(pos), 1, dpos - 1)
path = path & nodeName + ","
pos = disNodeInfo(pos, 1)Loop
dpos = InStr(Map(pos), ",")
nodeName = Mid(Map(pos), 1, dpos - 1)
path = path & nodeName + ","
Sway = path
End Function这是段帝结斯卡拉的计算。小数据还挺快。数据一多。要8。9秒。。求人帮着优化一下。
Dim nStep As Integer
ReDim disNodeInfo(UBound(Map), 2) As Integer
Dim spos, dpos, dd As Integer
Dim nodeName, tmpStr, tmp, path As String
ReDim S(UBound(Map)) As Integerdis = 0
st = 0
ed = 0
i = 0
J = 0
pos = 0
nStep = 0
spos = 0
dpos = 0
dd = 0
noname = ""
tmpStr = ""
path = ""For i = 0 To UBound(Map) S(i) = 0
disNodeInfo(i, 0) = 511
disNodeInfo(i, 1) = -1
dpos = InStr(Map(i), ",")
nodeName = Mid(Map(i), 1, dpos - 1)
If 0 = StrComp(start, nodeName) Then st = i
If 0 = StrComp(ends, nodeName) Then ed = i
Next ipos = ed
nStep = 0S(ed) = 1
disNodeInfo(ed, 0) = 0
disNodeInfo(ed, 1) = -1Do While (st <> pos And nStep < UBound(Map))If IsStop = True Then
Exit Function
End If
OutStr ("正在计算......") For i = 0 To UBound(Map) If IsStop = True Then
Exit Function
End If
If (1 = S(i) And nStep = disNodeInfo(i, 0)) Then
pos = i
spos = 0
tmpStr = Map(i) + ","
dpos = InStr(tmpStr, ",")
spos = dpos
dpos = InStr(spos + 1, tmpStr, ",")
Do While (dpos > 0)
If IsStop = True Then
Exit Function
End If tmp = Mid(tmpStr, spos + 1, dpos - spos - 1)
For J = 0 To UBound(Map)
If IsStop = True Then
Exit Function
End If dd = InStr(Map(J), ",")
nodeName = Mid(Map(J), 1, dd - 1)
If 0 = StrComp(tmp, nodeName) Then
Exit For
End If
Next J
If (1 <> S(J)) Then
S(J) = 1
disNodeInfo(J, 0) = nStep + 1
disNodeInfo(J, 1) = pos
Else
If disNodeInfo(J, 0) + 1 < nStep Then
disNodeInfo(pos, 0) = disNodeInfo(J, 0) + 1
disNodeInfo(pos, 1) = J
End If
End If
spos = dpos
dpos = InStr(spos + 1, tmpStr, ",")
Loop
End If
Next i
nStep = nStep + 1
Loop
dpos = InStr(Map(st), ",")
nodeName = Mid(Map(st), 1, dpos - 1)
pos = st
path = ""
Do While (pos <> ed And pos >= 0)
If IsStop = True Then
Exit Function
End If
dpos = InStr(Map(pos), ",")
nodeName = Mid(Map(pos), 1, dpos - 1)
path = path & nodeName + ","
pos = disNodeInfo(pos, 1)Loop
dpos = InStr(Map(pos), ",")
nodeName = Mid(Map(pos), 1, dpos - 1)
path = path & nodeName + ","
Sway = path
End Function这是段帝结斯卡拉的计算。小数据还挺快。数据一多。要8。9秒。。求人帮着优化一下。
Public Sub MapInit()
MapinFor J = 0 To UBound(MapI)
'MsgBox MapI(J)
For i = 1 To UBound(Split(MapI(J), vbCrLf))
ReDim Preserve Map(T)
Map(T) = Split(MapI(J), vbCrLf)(i)
T = T + 1 Next
Next
End Sub
Public Sub Mapin()
Dim stm As String
Dim i As Integer
Dim J As Integer
Dim MapTemp() As String
i = 0
J = 0
MapPath = App.path & "\Data.dll"
Tfl = FreeFile
Open MapPath For Input As #Tfl
Do Until EOF(Tfl)
Line Input #Tfl, stm
If stm > "" Then
' If enStr = "" Then
' enStr = Crypt(stm, "100")
' Else
' enStr = enStr & Crypt("/!", "100") & Crypt(stm, "100")
' End If
If stm = "[next]" Then
i = 0
'If J > 1 Then
'MsgBox MapI(J - 1)
'End If
ReDim Preserve MapI(J)
ReDim Preserve MapName(J)
MapName(J) = MapTemp(0)
MapI(J) = MapTemp(1)
For K = 2 To UBound(MapTemp)
MapI(J) = MapI(J) & vbCrLf & MapTemp(K)
Next
J = J + 1
Else
ReDim Preserve MapTemp(i)
MapTemp(i) = stm
i = i + 1
End If
End If
Loop
Close #Tfl
End SubSub outstr(ss)
Form1.Caption = ss
End SubFunction Sway(start, ends) Dim dis, st, ed, i, J, pos As Integer
Dim nStep As Integer
ReDim disNodeInfo(UBound(Map), 2) As Integer
Dim spos, dpos, dd As Integer
Dim nodeName, tmpStr, tmp, path As String
ReDim S(UBound(Map)) As Integer dis = 0
st = 0
ed = 0
i = 0
J = 0
pos = 0
nStep = 0
spos = 0
dpos = 0
dd = 0
noname = ""
tmpStr = ""
path = ""
For i = 0 To UBound(Map) S(i) = 0
disNodeInfo(i, 0) = 511
disNodeInfo(i, 1) = -1
dpos = InStr(Map(i), ",")
nodeName = Mid(Map(i), 1, dpos - 1)
If 0 = StrComp(start, nodeName) Then st = i
If 0 = StrComp(ends, nodeName) Then ed = i
Next i pos = ed
nStep = 0 S(ed) = 1
disNodeInfo(ed, 0) = 0
disNodeInfo(ed, 1) = -1 Do While (st <> pos And nStep < UBound(Map)) If IsStop = True Then
Exit Function
End If
OutStr ("正在计算......") For i = 0 To UBound(Map) If IsStop = True Then
Exit Function
End If
If (1 = S(i) And nStep = disNodeInfo(i, 0)) Then
pos = i
spos = 0
tmpStr = Map(i) + ","
dpos = InStr(tmpStr, ",")
spos = dpos
dpos = InStr(spos + 1, tmpStr, ",")
Do While (dpos > 0)
If IsStop = True Then
Exit Function
End If tmp = Mid(tmpStr, spos + 1, dpos - spos - 1)
For J = 0 To UBound(Map)
If IsStop = True Then
Exit Function
End If dd = InStr(Map(J), ",")
nodeName = Mid(Map(J), 1, dd - 1)
If 0 = StrComp(tmp, nodeName) Then
Exit For
End If
Next J
If (1 <> S(J)) Then
S(J) = 1
disNodeInfo(J, 0) = nStep + 1
disNodeInfo(J, 1) = pos
Else
If disNodeInfo(J, 0) + 1 < nStep Then
disNodeInfo(pos, 0) = disNodeInfo(J, 0) + 1
disNodeInfo(pos, 1) = J
End If
End If
spos = dpos
dpos = InStr(spos + 1, tmpStr, ",")
Loop
End If
Next i
nStep = nStep + 1
Loop
dpos = InStr(Map(st), ",")
nodeName = Mid(Map(st), 1, dpos - 1)
pos = st
path = ""
Do While (pos <> ed And pos >= 0)
If IsStop = True Then
Exit Function
End If
dpos = InStr(Map(pos), ",")
nodeName = Mid(Map(pos), 1, dpos - 1)
path = path & nodeName + ","
pos = disNodeInfo(pos, 1) Loop
dpos = InStr(Map(pos), ",")
nodeName = Mid(Map(pos), 1, dpos - 1)
path = path & nodeName + ","
Sway = path
End Function 以上是代码。。
下面的是数据
muyecaoyuan
牧野草原
牧野草原.牧野草原01,牧野草原.牧野草原00,牧野草原.牧野草原02
牧野草原.牧野草原02,牧野草原.牧野草原01,牧野草原.牧野草原12,牧野草原.牧野草原13
牧野草原.牧野草原03,牧野草原.牧野草原14,猫隐.村口
牧野草原.牧野草原04,牧野草原.牧野草原06,牧野草原.牧野草原08,牧野草原.牧野草原10
牧野草原.牧野草原05,牧野草原.牧野草原00,牧野草原.牧野草原06
牧野草原.牧野草原06,牧野草原.牧野草原04,牧野草原.牧野草原05,万马草原.万马草原_03
牧野草原.牧野草原07,牧野草原.牧野草原00,牧野草原.牧野草原10
牧野草原.牧野草原08,牧野草原.牧野草原04,牧野草原.牧野草原15,牧野草原.牧野草原16
牧野草原.牧野草原09,牧野草原.牧野草原22,牧野草原.牧野草原23
牧野草原.牧野草原10,牧野草原.牧野草原04,牧野草原.牧野草原07,牧野草原.牧野草原11
牧野草原.牧野草原11,牧野草原.牧野草原10,牧野草原.牧野草原12
牧野草原.牧野草原12,牧野草原.牧野草原11,牧野草原.牧野草原13,牧野草原.牧野草原02,牧野草原.牧野草原17
牧野草原.牧野草原13,牧野草原.牧野草原02,牧野草原.牧野草原12,牧野草原.牧野草原14
牧野草原.牧野草原14,牧野草原.牧野草原13,牧野草原.牧野草原18,牧野草原.牧野草原03
牧野草原.牧野草原15,牧野草原.牧野草原08,牧野草原.牧野草原20
牧野草原.牧野草原16,牧野草原.牧野草原08,牧野草原.牧野草原20
牧野草原.牧野草原17,牧野草原.牧野草原12,牧野草原.牧野草原24
牧野草原.牧野草原18,牧野草原.牧野草原14,牧野草原.牧野草原24,牧野草原.牧野草原25
牧野草原.牧野草原20,牧野草原.牧野草原15,牧野草原.牧野草原16,牧野草原.牧野草原26
牧野草原.牧野草原21,牧野草原.牧野草原22,牧野草原.牧野草原26
牧野草原.牧野草原22,牧野草原.牧野草原21,牧野草原.牧野草原32,牧野草原.牧野草原09
牧野草原.牧野草原23,牧野草原.牧野草原09,牧野草原.牧野草原22,牧野草原.牧野草原24,牧野草原.牧野草原33
牧野草原.牧野草原24,牧野草原.牧野草原17,牧野草原.牧野草原18,牧野草原.牧野草原23
牧野草原.牧野草原25,牧野草原.牧野草原18,牧野草原.牧野草原27,牧野草原.牧野草原28
牧野草原.牧野草原26,牧野草原.牧野草原20,牧野草原.牧野草原21,牧野草原.牧野草原30
牧野草原.牧野草原27,牧野草原.牧野草原25,牧野草原.牧野草原34
牧野草原.牧野草原28,牧野草原.牧野草原34,牧野草原.牧野草原25,牧野草原.牧野草原35
牧野草原.牧野草原30,牧野草原.牧野草原26,牧野草原.牧野草原31
牧野草原.牧野草原31,牧野草原.牧野草原30,牧野草原.牧野草原32
牧野草原.牧野草原32,牧野草原.牧野草原31,牧野草原.牧野草原33,牧野草原.牧野草原22
牧野草原.牧野草原33,牧野草原.牧野草原32,牧野草原.牧野草原23,牧野草原.牧野草原36
牧野草原.牧野草原34,牧野草原.牧野草原36,牧野草原.牧野草原27,牧野草原.牧野草原28
牧野草原.牧野草原35,牧野草原.牧野草原28,低矮林地.矮林边界
牧野草原.牧野草原36,牧野草原.牧野草原33,牧野草原.牧野草原34
牧野草原.牧野草原00,牧野草原.牧野草原01,牧野草原.牧野草原05,牧野草原.牧野草原07
[next]