日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图的应用1---单源最短路径问题

發布時間:2024/5/14 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图的应用1---单源最短路径问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最短路徑介紹

最短路徑問題是圖論研究中的一個經典算法問題,旨在尋找圖中兩結點之間的最短路徑。 算法具體的形式包括:

  • 確定起點的最短路徑問題,即已知起始結點,求最短路徑的問題。
  • 確定終點的最短路徑問題,與確定起點的問題相反,該問題是已知終結結點,求最短路徑的問題。
    在無向圖中該問題與確定起點的問題完全等同,在有向圖中該問題等同于把所有路徑方向反轉的確定起點的問題。
  • 確定起點終點的最短路徑問題 - 即已知起點和終點,求兩結點之間的最短路徑。
  • 全局最短路徑問題 - 求圖中所有的最短路徑。
  • 解決方法

    用于解決最短路徑問題的算法被稱做“最短路徑算法”, 有時被簡稱作“路徑算法”。 最常用的路徑算法有:
    Dijkstra算法
    SPFA算法\Bellman-Ford算法
    Floyd算法\Floyd-Warshall算法
    Johnson算法
    A*算法

    單源最短路徑

    問題描述

  • 給定一個帶權有向圖 G=(V,E) ,其中每條邊的權是一個非負實數。
  • 還給定 V中的一個頂點,稱為源。
  • 現在我們要計算從源到所有其他各頂點的最短路徑長度。這里的長度是指路上各邊權之和。
  • 這個問題通常稱為單源最短路徑問題。

    Dijkstra算法的解決方案

    算法思路

  • 指定一個節點,例如我們要計算 ‘A’ 到其他節點的最短路徑
  • 引入兩個集合(S、U):
    S集合包含已求出的最短路徑的點(以及相應的最短長度),
    U集合包含未求出最短路徑的點(以及A到該點的路徑,注意如上圖所示,A->C由于沒有直接相連,初始時為∞)
  • 初始化兩個集合,S集合初始時只有當前要計算的節點,A->A = 0,
    U集合初始時為:
    A->B = 4,
    A->C = ∞,
    A->D = 2,
    A->E = ∞,
    敲黑板!!!接下來要進行核心兩步驟了
  • 從U集合中找出路徑最短的點,加入S集合,例如 A->D = 2
  • 更新U集合路徑,if ( ‘D 到 B,C,E 的距離’ + ‘AD 距離’ < ‘A 到 B,C,E 的距離’ ) ,則更新U
  • 循環執行4、5 兩步驟,直至遍歷結束,得到A 到其他節點的最短路徑
  • 算法圖解

  • 選定A節點并初始化
  • 找出U集合中路徑最短的節點D加入S集合,并根據條件if( ‘D 到 B,C,E 的距離’ + ‘AD 距離’ < ‘A 到 B,C,E 的距離’ ) 來更新U集合,此時:
    D->B = 1,
    D->C = 1,
    D->E = 7,
    所以,此時:
    A->D->B = 3,
    A->D->C = 3,
    A->D->E = 7,
    比起第一步的:
    A->B = 4,
    A->C = ∞,
    A->D = 2,
    A->E = ∞,
    所以,我們要更新U集合!使之到其余頂點的路是比之前來說短的!
  • 這時候 A->B, A->C 都為3,沒關系。其實這時候他倆都是最短距離,如果從算法邏輯來講的話,會先取到B點。而這個時候 if 條件變成了 if ( ‘B 到 C,E 的距離’ + ‘AB 距離’ < ‘A 到 C,E 的距離’ ) ,如圖所示這時候A->B距離 其實為 A->D->B
  • 思路就是這樣,往后就是大同小異了
  • 算法結束
  • 參考

    作者:殷天文 鏈接:https://www.jianshu.com/p/ff6db00ad866

    總結

    以上是生活随笔為你收集整理的图的应用1---单源最短路径问题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。