最短路 Dijkstra演算法

2022-06-08 19:09:10 字數 837 閱讀 7472

解決:單源最短路問題(乙個源點到其餘所有點的最短路問題)

堆優化複雜度:o(nlogn)

演算法思想:可以理解為多公尺諾骨牌,先到達點t的骨牌有貢獻,後到達的骨牌無貢獻。利用貪心的思想

步驟:源點s

1:首先將所有的點分為兩類,一類是已經找到到源點s的最短路的點s,一類是沒有找到t。起初s中只有源點s

2:在s的所有直連鄰居中,找到最近的鄰居u,u肯定是骨牌最首先到達的,那麼記錄dis[u]的值,然後再在u的直連鄰居中+dis[u]的直連鄰居比較,找到最小的值v,記錄dis[v],下次再在v的直連鄰居中+dis[v]和s的直連鄰居以及u的直連鄰居+dis[u]中找最小值,如此查詢,直到找到所有的結點

const

int n=1e5+10

;const

int inf=1e9;

struct

edge

};struct

s_node

bool

operator

<(const

struct s_node &a) const

};int dis[n];//

記錄所有結點到源點的最短距離

bool done[n];//

true表示已經找到該結點的最短路

intpre[n];

vector

e[n];

intn;

void print_path(int s,int

t) print_path(s,pre[t]);

cout

<"";

}void dijkstra(int s)}}

}

最短路 Dijkstra演算法

dijksitra演算法求最短路僅僅適用於不存在右邊是負權的情況 bellman ford演算法沒有這乙個限制 主要特點是從起點為中心向外層層擴充套件,直到擴充套件到終點為止。即乙個最短路路徑中經過的所有點這條路均是其最短路。反證法易證 dijkstra基本思路 找到最短距離已經確定的頂點,從它出發...

dijkstra最短路演算法

dijkstra演算法 1.定義概覽 dijkstra 迪傑斯特拉 演算法是典型的單源最短路徑演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法是很有代表性的最短路徑演算法,在很多專業課程中都作為基本內容有詳細的...

最短路 Dijkstra演算法

這是一類求單源最短路的演算法,也就是求某乙個頂點到其他所有頂點的最短路。它是按照最短路徑遞增的順序來計算的。先說一下大體思路 將圖中的頂點分為兩個集合,s,v s。s儲存已經求出最短路徑的頂點,v s儲存未求出最短路的頂點。然後演算法就是不斷額的求出v s中頂點的最短路,然後把它加入s中,直到所有頂...