亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? frmshortpath.frm

?? 最短路徑算法
?? FRM
字號:
VERSION 5.00
Begin VB.Form FrmShortPath 
   Caption         =   "Form1"
   ClientHeight    =   2484
   ClientLeft      =   48
   ClientTop       =   348
   ClientWidth     =   3744
   LinkTopic       =   "Form1"
   ScaleHeight     =   2484
   ScaleWidth      =   3744
   StartUpPosition =   3  '窗口缺省
   Begin VB.CommandButton Command1 
      Caption         =   "Command1"
      Height          =   432
      Left            =   900
      TabIndex        =   0
      Top             =   300
      Width           =   1392
   End
End
Attribute VB_Name = "FrmShortPath"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
'NoNode1                    起始點編碼
'NoNode2                    結束點編碼
'nNode                      為網中最大的節點數
'LinkN(i)                   與i點相連Line個數
'LinkNi(i)                  與i點相連Line端點存放序號
'iLL=LinkNi(LL) - i + 1
'LinkNo(iLL)                與i點相連Line端點順序編號
Private Sub ShortPaths(NoNode1 As Integer, NoNode2 As Integer, nNode As Integer, LonNode() As Double, LatNode() As Double, NoNode() As Integer, LinkN() As Integer, LinkNi() As Integer, LinkNo() As Integer, NodeShortPath() As Integer, nNodeShortPath As Integer)
Dim II As Integer, I As Integer, J As Integer, LL As Integer, iLL As Integer, LLt As Integer
Dim iNode As Integer
Dim NodeCheck() As Boolean  '標記已經查過的點
Dim NodeUse() As Boolean    '標記已經作結果點用過的點
Dim NodeShortXmax() As Double
Dim TanYX As Double, TanYXmax As Double, TanXmax As Double, Xmax As Double
Dim Lon1 As Double, Lat1 As Double, Lon2 As Double, Lat2 As Double
Dim Lon1t As Double, Lat1t As Double
Dim LatNodeT As Double, LonNodeT As Double
Dim CosAngle As Double, SinAngle As Double
Dim StartNo As Integer, EndNo As Integer

Screen.MousePointer = 11

'Begin根據編碼,搜索序號
StartNo = 0
EndNo = 0
For I = 1 To nNode
    If (NoNode(I) = NoNode1) Then
        StartNo = I
    End If
    If (NoNode(I) = NoNode2) Then
        EndNo = I
    End If
    If (StartNo > 0 And EndNo > 0) Then Exit For
Next I
'End根據編碼,搜索序號
        
'Begin計算有關投影參數
Lon1 = LonNode(StartNo)
Lat1 = LatNode(StartNo)
Lon2 = LonNode(EndNo)
Lat2 = LatNode(EndNo)
CosAngle = (Lon2 - Lon1) / Sqr((Lon2 - Lon1) ^ 2 + (Lat2 - Lat1) ^ 2)
SinAngle = (Lat2 - Lat1) / Sqr((Lon2 - Lon1) ^ 2 + (Lat2 - Lat1) ^ 2)
Lon1t = CosAngle * Lon1 + SinAngle * Lat1
Lat1t = CosAngle * Lat1 - SinAngle * Lon1
'End計算有關投影參數

ReDim NodeCheck(1 To nNode), NodeUse(1 To nNode), NodeShortPath(1 To nNode), NodeShortXmax(1 To nNode)
For I = 1 To nNode
    NodeCheck(I) = False
    NodeUse(I) = False
Next I

'Begin設置初始搜索點
LL = StartNo
NodeCheck(LL) = True
NodeUse(LL) = True
NodeShortPath(1) = LL
NodeShortXmax(1) = 0
nNodeShortPath = 1
Xmax = Lon1t
'End設置初始搜索點
Do
    '先從與開始點相連的起點尋找
    TanYXmax = -1E+35
    TanXmax = -1E+35
    LLt = 0
    For I = 1 To LinkN(LL)          '以與LL點相連的起點的個數循環
        iLL = LinkNi(LL) + I - 1
        J = LinkNo(iLL)             '找出與LL點相連的起點的點號
        If (NodeUse(J) = False) Then
            LonNodeT = CosAngle * LonNode(J) + SinAngle * LatNode(J)
            LatNodeT = CosAngle * LatNode(J) - SinAngle * LonNode(J)
            If (Lat1t = LatNodeT) Then
                TanYX = 1E+35
            Else
                TanYX = Abs((LonNodeT - Lon1t) / (LatNodeT - Lat1t))
            End If
            If (TanYX > TanYXmax And LonNodeT > Xmax) Then
                TanYXmax = TanYX
                TanXmax = LonNodeT
                LLt = J
                NodeCheck(J) = True
            End If
        End If
    Next I
    
    If (LLt = 0) Then '無通路,退出一點在搜索
        If (nNodeShortPath <= 1) Then
            nNodeShortPath = 0
            Screen.MousePointer = 0
            MsgBox "搜索失敗!", vbOKOnly, "關于搜索最優路經"
            Exit Sub
        End If
        nNodeShortPath = nNodeShortPath - 1
        LL = NodeShortPath(nNodeShortPath)
        
        'Begin計算有關投影參數
        Lon1 = LonNode(LL)
        Lat1 = LatNode(LL)
        CosAngle = (Lon2 - Lon1) / Sqr((Lon2 - Lon1) ^ 2 + (Lat2 - Lat1) ^ 2)
        SinAngle = (Lat2 - Lat1) / Sqr((Lon2 - Lon1) ^ 2 + (Lat2 - Lat1) ^ 2)
        Lon1t = CosAngle * Lon1 + SinAngle * Lat1
        Lat1t = CosAngle * Lat1 - SinAngle * Lon1
        Xmax = Lon1t
        'End計算有關投影參數
    Else
        LL = LLt
        NodeUse(LL) = True
        Xmax = TanXmax
        
        nNodeShortPath = nNodeShortPath + 1
        NodeShortPath(nNodeShortPath) = LL
        NodeShortXmax(nNodeShortPath) = Xmax
        If (LL = EndNo) Then Exit Do
    End If
Loop
Screen.MousePointer = 0

MsgBox "搜索完畢!", vbOKOnly, "關于搜索最優路經"
End Sub
Private Function ShortPathsT(StartNo As Integer, EndNo As Integer, nNode As Integer, LinkN() As Integer, LinkNi() As Integer, LinkNo() As Integer, LinkDis() As Double) As Single
Dim II As Integer, I As Integer, J As Integer, LL As Integer, iLL As Integer
Dim iNode As Integer
Dim S As Single             '路徑和
Dim Min As Single
Dim NodeCheck() As Boolean  '標記已經查過的點
Dim NodeUse() As Boolean    '標記已經作結果點用過的點
Dim RS() As Single          '假設從起點到任一點的距離都為無窮大
Dim Result() As Single      '結果長度
Dim ResultNo() As Integer
Dim iResult As Integer
Dim No() As Integer
Dim MinPoint As Integer

ReDim NodeCheck(1 To nNode), NodeUse(1 To nNode)
ReDim RS(1 To nNode), Result(1 To nNode), ResultNo(1 To nNode)

For I = 1 To nNode
    NodeCheck(I) = False                    '標記未經查過的點。
    NodeUse(I) = False                      '標記未經作結果點用過的點
    RS(I) = 1E+38                           '假設從起點到任一點的距離都為無窮大
Next I

LL = StartNo                                '設置開始點。
NodeUse(LL) = True                          '標記開始點為真。即已經作結果點用過。
J = 0
For iNode = 1 To nNode
    '先從與開始點相連的起點尋找
    For I = 1 To LinkN(LL)                  '以與LL點相連的起點的個數循環
        iLL = LinkNi(LL) + I - 1
        iResult = LinkNo(iLL)               '找出與LL點相連的起點的點號
        If NodeCheck(iResult) = False Then  '如果沒經查過,則進行
            S = LinkDis(iLL) + Result(LL)   '找出長度并求和
            If NodeUse(iResult) = True Then '如果已經作為結果點判斷哪一個長
                If S <= RS(iResult) Then    '如果這一點到起點的長度比現在的路線長,替代
                    RS(iResult) = S
                    Result(iResult) = S     '設置到這點的最短路徑長度
                    ResultNo(iResult) = LL
                End If
            Else                            '如果上面的條件都不符合則進行下面的語句
                NodeCheck(iResult) = True
                RS(iResult) = S
                Result(iResult) = S
                ResultNo(iResult) = LL
                
                J = J + 1                   '每找到一個點加一,為了下面的判斷
                ReDim Preserve No(1 To J)   '從新定義數組并使其值為當前的點號
                No(J) = iResult
            End If
        End If
    Next I

    '設置最小為無窮大,最短路徑點為空
    Min = 1E+38
    MinPoint = 0
    
    '找出已經查過點中長度最短的點
    For I = iNode To J
        If RS(No(I)) < Min Then
            II = I
            Min = RS(No(I))
            MinPoint = No(I)
        End If
    Next I
    
    '如果沒有結果,即起點與終點沒有通路退出程序
    If Min = 1E+38 Then
        MsgBox "即起點與終點沒有通路!", vbOKOnly, "關于搜索最短路徑"
        Exit Function
    End If
    
    '將兩點互換,減少循環。
    No(II) = No(iNode)
    No(iNode) = MinPoint
    
    '標記已經作為結果點判斷過
    NodeUse(MinPoint) = True
    LL = MinPoint
    
    '判斷結果點是否等于終點,如果等于則已經找到最短路徑
    If MinPoint = EndNo Then Exit For
Next iNode

'返回最短路徑長度
ShortPaths = Result(EndNo)
MsgBox "最短路徑為:" + Format(ShortPaths, "#####0.0公里"), vbOKOnly, "關于路徑"
End Function

Private Sub Command1_Click()
    Dim ShortPath As Double
    Dim TheInFileNode As String, TheInFileLine As String
    Dim LonNode() As Double, LatNode() As Double, NoNode() As Integer, nNode As Integer
    Dim LineNode() As Integer, LineDis() As Double, nLineNode As Integer
    Dim LinkN() As Integer, LinkNi() As Integer, LinkDis() As Double, LinkNo() As Integer
    Dim StartNo As Integer, EndNo As Integer
    Dim ShortDis As Single
    Dim NodeShortPath() As Integer, nNodeShortPath As Integer
    Dim I As Integer
    
    TheInFileNode = "C:\MapInfo開發\819ShortPath\中國主干公路節點.MID"
    TheInFileLine = "C:\MapInfo開發\819ShortPath\中國主干公路線.MID"
    Call ReadNode(TheInFileNode, TheInFileLine, LonNode, LatNode, NoNode, nNode, LineNode, LineDis, nLineNode, LinkN, LinkNi, LinkDis, LinkNo)

    StartNo = 119
    EndNo = 457
    Call ShortPaths(StartNo, EndNo, nNode, LonNode, LatNode, NoNode, LinkN, LinkNi, LinkNo, NodeShortPath, nNodeShortPath)
    
    For I = 1 To nNodeShortPath
        Debug.Print I, NodeShortPath(I), NoNode(NodeShortPath(I))
    Next I
End Sub
'讀節點數據
Private Sub ReadNode(TheInFileNode As String, TheInFileLine As String, LonNode() As Double, LatNode() As Double, NoNode() As Integer, nNode As Integer, LineNode() As Integer, LineDis() As Double, nLineNode As Integer, LinkN() As Integer, LinkNi() As Integer, LinkDis() As Double, LinkNo() As Integer)
Dim I As Integer, J As Integer, N As Integer, NN As Integer
Dim LineTemp As String
Dim Lon1 As Double, Lon2 As Double, Lat1 As Double, Lat2 As Double
Dim Node1 As Integer, Node2 As Integer
Dim NodeNo1 As Integer, NodeNo2 As Integer
Dim LineNodeNo1() As Integer, LineNodeNo2() As Integer

'Begin讀節點數據
nNode = 0
Open TheInFileNode For Input As #1
Do While Not EOF(1)
    Line Input #1, LineTemp
    nNode = nNode + 1
Loop
Close (1)

ReDim LonNode(1 To nNode), LatNode(1 To nNode), NoNode(1 To nNode)
Open TheInFileNode For Input As #1
For I = 1 To nNode
    Input #1, LatNode(I), LonNode(I), LineTemp
    NoNode(I) = Val(LineTemp)
Next I
Close (1)
'End讀節點數據


'Begin讀Line數據
nLineNode = 0
Open TheInFileLine For Input As #1
Do While Not EOF(1)
    Line Input #1, LineTemp
    nLineNode = nLineNode + 1
Loop
Close (1)

ReDim LineNode(1 To 2, 1 To nLineNode), LineDis(1 To nLineNode)
ReDim LineNodeNo(1 To 2, 1 To nLineNode)

Open TheInFileLine For Input As #1
For I = 1 To nLineNode
    Input #1, LineNode(1, I), LineNode(2, I), LineDis(I)
Next I
Close (1)
'End讀Line數據

'Begin計算距離
For I = 1 To nLineNode
    'Begin搜索Line對應節點
    Node1 = LineNode(1, I)
    Node2 = LineNode(2, I)
    NodeNo1 = 0
    NodeNo2 = 0
    For J = 1 To nNode
        If (NoNode(J) = Node1) Then
            NodeNo1 = J
        End If
        If (NoNode(J) = Node2) Then
            NodeNo2 = J
        End If
        If (NodeNo1 > 0 And NodeNo2 > 0) Then Exit For
    Next J
    'End搜索Line對應節點
    If (NodeNo1 = 0 Or NodeNo2 = 0) Then
        MsgBox "節點" + Format(NodeNo1, "####0 ") + Format(NodeNo2, "####0") + "不存在", vbOKOnly, "關于節點"
    End If
    
    LineNodeNo(1, I) = NodeNo1
    LineNodeNo(2, I) = NodeNo2
    
    'Begin開始計算距離
    Lon1 = LonNode(NodeNo1)
    Lat1 = LatNode(NodeNo1)
    Lon2 = LonNode(NodeNo2)
    Lat2 = LatNode(NodeNo2)
    If (LineDis(I) <= 0) Then
        LineDis(I) = 111.199 * Sqr((Lat1 - Lat2) ^ 2 + ((Lon1 - Lon2) * Cos((Lat1 + Lat2) * 0.00872665)) ^ 2)
    End If
    'End開始計算距離
Next I
'End計算距離

ReDim LinkN(1 To nNode), LinkNi(1 To nNode + 1), LinkDis(1 To nLineNode * 3), LinkNo(1 To nLineNode * 3)
'Begin開始搜索與節點相連的Line
LinkNi(1) = 1
NN = 0
For I = 1 To nNode
    N = 0
    For J = 1 To nLineNode
        If (LineNode(1, J) = NoNode(I)) Then
            N = N + 1
            
            NN = NN + 1
            LinkDis(NN) = LineDis(J)
            LinkNo(NN) = LineNodeNo(2, J)
        ElseIf (LineNode(2, J) = NoNode(I)) Then
            N = N + 1
            
            NN = NN + 1
            LinkDis(NN) = LineDis(J)
            LinkNo(NN) = LineNodeNo(1, J)
        End If
    Next J
    LinkN(I) = N
    LinkNi(I + 1) = LinkNi(I) + N
    If (N = 0) Then
        MsgBox "節點" + Format(NoNode(I), "###0") + "無線路!", vbOKOnly, "關于搜索與節點相連的線路"
    End If
Next I
'End開始搜索與節點相連的Line
End Sub

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合偷拍欧美一区色| 蜜桃91丨九色丨蝌蚪91桃色| 99re热这里只有精品免费视频| 亚洲在线视频网站| 久久精品国产免费看久久精品| 性做久久久久久久久| 国产精品国产自产拍高清av | 国产99一区视频免费| 免费亚洲电影在线| 亚洲精品中文字幕乱码三区| 亚洲视频小说图片| 久久男人中文字幕资源站| 欧美在线不卡一区| 91视频免费看| 欧美一区二区三区免费大片| 欧美在线观看视频一区二区 | 欧美日本在线观看| 日本精品视频一区二区三区| av网站一区二区三区| 精品国产一区二区在线观看| 色噜噜狠狠色综合欧洲selulu | 91社区在线播放| 欧美r级电影在线观看| 欧美视频一二三区| 91精品婷婷国产综合久久| 欧美日韩高清一区二区| 综合欧美一区二区三区| 国产91色综合久久免费分享| 精品写真视频在线观看| 国产高清亚洲一区| jizzjizzjizz欧美| 国产农村妇女毛片精品久久麻豆| 国产精品白丝在线| 国产 欧美在线| 国产日产欧美一区二区视频| 狠狠v欧美v日韩v亚洲ⅴ| 国产成人精品午夜视频免费| 久久久久99精品国产片| 久久99精品国产麻豆不卡| 日韩久久精品一区| 91亚洲精品乱码久久久久久蜜桃| 国产亚洲一区字幕| 国产精品初高中害羞小美女文| 国产成人午夜精品5599 | 欧美日韩精品免费| 亚洲一区二区三区在线播放| 91福利资源站| 天天综合色天天综合| 国产suv一区二区三区88区| 精品88久久久久88久久久| 激情综合色播激情啊| 久久青草国产手机看片福利盒子| 精品一区二区日韩| 亚洲国产成人自拍| 欧美一级淫片007| 久久99热国产| 中文字幕中文字幕一区| 91香蕉视频污| 日韩在线播放一区二区| 国产aⅴ综合色| 亚洲欧美日韩国产综合| 国产一区二区福利视频| 欧美日韩一区在线| 国产精品大尺度| 欧美日精品一区视频| 久久99国产精品免费网站| 国产欧美精品在线观看| 91久久免费观看| 免费亚洲电影在线| 国产精品久久久爽爽爽麻豆色哟哟 | 欧美三级午夜理伦三级中视频| 日韩二区在线观看| 欧美又粗又大又爽| 极品少妇xxxx精品少妇偷拍| 中文字幕一区二区三区在线播放| 精品一区二区免费| 亚洲人成亚洲人成在线观看图片| 91精品一区二区三区在线观看| 国产福利91精品一区二区三区| 亚洲精品视频在线看| 精品国偷自产国产一区| av一本久道久久综合久久鬼色| 日韩高清在线不卡| 国产欧美视频一区二区| 欧美日韩中字一区| 国产成人综合自拍| 石原莉奈在线亚洲三区| 国产精品人成在线观看免费 | 亚洲一区二区在线观看视频| 精品欧美久久久| 欧美性xxxxx极品少妇| 国产在线不卡视频| 午夜精品成人在线视频| 中文字幕在线免费不卡| 欧美sm极限捆绑bd| 在线播放中文一区| 日韩综合小视频| 97精品久久久久中文字幕| 精品一区二区三区香蕉蜜桃| 一区二区三区不卡在线观看| 91欧美一区二区| 亚洲国产高清不卡| 久久精品人人做人人综合| 欧美精品777| 色噜噜狠狠色综合欧洲selulu| 91影院在线观看| av福利精品导航| 成人国产精品免费网站| 亚洲美女屁股眼交3| 国产情人综合久久777777| 久久综合色鬼综合色| 国产aⅴ综合色| 国产精品夜夜嗨| 亚洲欧美日韩久久| 最新日韩在线视频| 国产精品久久久久久久第一福利| 日韩欧美国产wwwww| 日韩一区二区影院| 大陆成人av片| 亚洲成人免费在线观看| 亚洲免费观看高清完整版在线观看| 国产欧美中文在线| 国产亚洲女人久久久久毛片| 久久久久久久久久美女| 精品成人一区二区| 日韩欧美成人激情| 国产风韵犹存在线视精品| 午夜精品久久久久久久99水蜜桃| 亚洲精品国产第一综合99久久 | 中文字幕人成不卡一区| 欧美高清在线精品一区| 精品99一区二区| 国产精品你懂的在线欣赏| 久久婷婷成人综合色| 欧美精品一区二区三区久久久| 777xxx欧美| 欧美电影一区二区| 久久综合国产精品| 精品成人私密视频| 久久久www免费人成精品| 国产精品久久久久影院色老大| 国产日韩在线不卡| 亚洲精品亚洲人成人网在线播放| 国产精品超碰97尤物18| 天天爽夜夜爽夜夜爽精品视频| 亚洲a一区二区| 国产在线一区二区| 久久99精品国产麻豆婷婷| 国产又粗又猛又爽又黄91精品| 成人黄色网址在线观看| 91小视频在线| 欧美刺激午夜性久久久久久久| 亚洲精品一区二区三区福利| 亚洲欧洲www| 国产精品久久久久久久久晋中| 婷婷综合久久一区二区三区| 国产在线精品一区二区不卡了| 香蕉成人伊视频在线观看| 久久电影网站中文字幕| 国产a精品视频| 成+人+亚洲+综合天堂| 色天使色偷偷av一区二区| 久久99最新地址| 色国产精品一区在线观看| 欧美在线观看视频在线| 久久久精品天堂| 一区二区在线电影| 国产制服丝袜一区| 色欧美日韩亚洲| 国产欧美一区二区三区鸳鸯浴 | 日本亚洲天堂网| 成人小视频在线观看| 日韩欧美亚洲另类制服综合在线| 国产日产欧美一区二区视频| 免费在线观看一区| 国产一区二区在线免费观看| 欧美日韩你懂的| 亚洲色图在线播放| 日韩欧美一区二区不卡| 91免费视频网址| 亚洲图片欧美一区| 亚洲精品你懂的| 成人精品视频一区| 成人精品在线视频观看| 欧美曰成人黄网| 中文字幕一区二区三区色视频 | 日韩一本二本av| 一区在线观看免费| 国产精品一区免费在线观看| 欧美一区二区三区喷汁尤物| 亚洲婷婷综合色高清在线| 青青草成人在线观看| 97精品国产露脸对白| 久久伊99综合婷婷久久伊| 亚洲一区二区三区在线| 91蝌蚪国产九色| 中文字幕不卡的av| 国产精品影音先锋| 日韩色在线观看| 韩国视频一区二区|