单源最短路径 :Dijkstra 算法
2010-10-05 17:09
435 查看
Dijkstra 算法用于解决有向图的最短路径问题。算法描述如下:
1. 初始化原点的距离为0,到其他任意点到原点的距离为无穷大。
2. 初始化已访问节点集合为空,未访问节点集合为所有节点。
3. 在未访问节点集合中找到一个到已访问节点集合距离最近的节点(第一次找到的节点为原点),将该节点加入已访问节点。
4. 更新该节点的邻居节点中处于未访问状态的节点的距离。
5. 重复第三步。直到所有节点都已经访问。
下面是一个最基本的Dijkstra 算法的c++实现,有向图存储采用的是邻接矩阵。
1. 初始化原点的距离为0,到其他任意点到原点的距离为无穷大。
2. 初始化已访问节点集合为空,未访问节点集合为所有节点。
3. 在未访问节点集合中找到一个到已访问节点集合距离最近的节点(第一次找到的节点为原点),将该节点加入已访问节点。
4. 更新该节点的邻居节点中处于未访问状态的节点的距离。
5. 重复第三步。直到所有节点都已经访问。
下面是一个最基本的Dijkstra 算法的c++实现,有向图存储采用的是邻接矩阵。
const int MAXN = 1001; const int INF = 0x7FFFFFFF; int matrix[MAXN][MAXN]; int dis[MANX] = {INF}; bool visit[MAXN] = {false} void dijkstra(int src, int des, int N) { int n = N; // N为节点总数 int i, min, mdis = INF; dis[src] = 0; // 第一步 while (n) { mdis = INF; for (i = 1; i <= N; i++) // 第三步 if (visit[i] == false && dis[i] < mdis) min = i, mdis = dis[i]; visit[min] = true, n--; for (i = 1; i <= N; i++) // 第四步 if (matrix[min][i] < INF && visit[i] == false && dis[min] + matrix[min][i] < dis[i]) dis[i] = dis[min] + matrix[min][i]; } printf("%d/n", dis[des]); // 打印结果 }
相关文章推荐
- 贪心算法之单源最短路径Dijkstra
- 贪心算法 - 单源最短路径 Dijkstra
- Dijkstra求单源最短路径(图论基础算法)
- Dijkstra单源最短路径算法
- 单源最短路径:Dijkstra 算法 Bellman_Ford 算法 SPFA 算法
- 算法 单源最短路径Dijkstra
- 单源最短路径(1):Dijkstra 算法
- 【经典算法】Dijkstra单源最短路径算法
- 单源最短路径(Dijkstra)算法
- Dijkstra 算法求单源最短路径
- 单源最短路径长度Dijkstra(迪杰斯特拉)算法
- 关于图的常用算法——Dijkstra单源最短路径、Floyd多源最短路径、Prim和Kruskal最小生成树算法
- 初学图论-Dijkstra单源最短路径算法基于优先级队列(Priority Queue)的实现
- //九度教程78 dijkstra算法之单源最短路径
- Dijkstra算法求单源最短路径
- [Dijkstra单源最短路径算法]算法思想速成
- 图论;单源最短路径;拓扑排序+松弛(有向无回路);Bellman-Ford(回路,负权回路);Dijkstra(无负权,可回路);可以用最小堆实现算法的优化;
- 迪杰斯特拉(Dijkstra)算法求解单源最短路径及其相应长度(java实现)
- 单源最短路径---迪杰克斯拉算法(Dijkstra)
- 贪心算法 - 单源最短路径 Dijkstra