解決單源最短路徑問題(已固定乙個起點,求它到其他所有點的最短路問題)
(1)確定的與起點相鄰的點的最短距離,再根據已確定最短距離的點更新其他與之相鄰的點的最短距離。
(2)之後的更新不需要再關心最短距離已確定的點
一、矩陣樸素版
二、vector簡單版
三、靜態鄰接表有點複雜版
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define inf 0x3f3f3f3f10 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中,直到所有頂...