最短路演算法 Dijkstra演算法

2022-03-04 15:36:17 字數 2311 閱讀 5038

解決單源最短路徑問題(已固定乙個起點,求它到其他所有點的最短路問題)

(1)確定的與起點相鄰的點的最短距離,再根據已確定最短距離的點更新其他與之相鄰的點的最短距離。

(2)之後的更新不需要再關心最短距離已確定的點

一、矩陣樸素版

二、vector簡單版

三、靜態鄰接表有點複雜版

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define inf 0x3f3f3f3f

10 using namespace std;

11 12 //鄰接矩陣

13 14 const int maxn = 110;

15 int dis[maxn];

16 int e[maxn][maxn];

17 bool vis[maxn];

18 int n, m;

19 20 void dij()

21 39 }

40 vis[p] = true;

41 42 for(int k = 1; k <= n; k++)

43

47 }

48 }

49 50 void init()

51 58 int main()

59 71

72 dij();

73 printf("%d\n", dis[n]);

74 }

75 76 return 0;

77 }

78 79

80 81 //vector 動態鄰接表 + 優先佇列

82 83 const int maxn = 1e3 + 50;

84 struct edge

85 89 };

90 91 vectorg[maxn];

92 typedef pairp;

93 int dis[maxn];

94 int n, m;

95 96 void init()

97 103

104 }

105 void dijkstra(int s)

106

127 }

128 }

129 }

130

131 int main()

132

142

143 //see see

144 /*

145 for(int i = 1; i <= n; i++)

146

151 */

152

153 dijkstra(1);

154 for(int i = 1; i <= n; i++)

155 printf("%d ", dis[i]);

156 puts("");

157

158 return 0;

159 }

160

161

162

163

164 ///靜態鄰接表 + 優先佇列優化

165

166 const int maxn = 1e3 + 50;

167 typedef pairheapnode;

168 struct edge

169 g[maxn*100];

172 int head[maxn], dis[maxn];

173 int n, m, cnt;

174

175 inline void init()

176

181

182 inline void add(int from, int to, int we)

183

189

190 void dij()

191

210 }

211 }

212 }

213

214 int main()

215

227

228 dij();

229 printf("%d\n", dis[n]);

230 }

231

232 return 0;

233 }

最短路 Dijkstra演算法

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

dijkstra最短路演算法

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

最短路 Dijkstra演算法

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