图论解dijkstra算法

dijkstra算法在路由器中的路由表中的应用。

普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。

一句话理解:最短加最短还是最短。

解析:从已知节点出发找的最小路径的边和顶点,将顶点加入到已知节点并形成无环图使整体和最小。

参考文献:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html

Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。

一句话理解:最短加某个值还是最短。

解析:确定源节点,从已知的节点为出发点迭代找出到未知节点的最短路径,形成从某节点到所有节点最短路径。

Dijkstra算法 – 大概过程 
创建两个表,OPEN, CLOSE。
OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。

1. 访问路网中里起始点最近且没有被检查过的点,把这个点放入OPEN组中等待检查。

2. 从OPEN表中找出距起始点最近的点,找出这个点的所有子节点,把这个点放到CLOSE表中。

3. 遍历考察这个点的子节点。求出这些子节点距起始点的距离值,放子节点到OPEN表中。

4. 重复2,3,步。直到OPEN表为空,或找到目标点。

参考文献:

http://blog.csdn.net/todd911/article/details/9347053

http://blog.csdn.net/zrjdds/article/details/6728332

相同

贪心算法+迭代累加

区别

1:

Prim是计算最小生成树的算法,比如为N个村庄修路,怎么修花销最少。

Dijkstra是计算最短路径的算法,比如从a村庄走到其他任意村庄的距离。

2:

Prim算法中有一个统计总len的变量,每次都要把到下一点的距离加到len中;

Dijkstra算法中却没有,只需要把到下一点的距离加到cls数组中即可;

3:

Prim算法的更新操作更新的cls是已访问集合到未访问集合中各点的距离;

23              for (j=0;j<n;j++)
24              {
25                  if (!visited[j] && map[j][nid]<adjset[j])//更新条件:j点未访问,加入新点后已访问集合到j的距离变小了
26                  {
27                      adjset[j] = map[j][nid];
28                  }
29              }

Dijkstra算法的更新操作更新的cls是源点到未访问集合中各点的距离,已经访问过的相当于已经找到源点到它的最短距离了;

20         for (j=1;j<=n;j++)
21        {

22             if(!vis[j]&&map[nxt][j]<MAX&&(min+map[nxt][j])<cls[j])//更新条件:j点未访问,新点与j点之间有路,
23                 cls[j]=cls[nxt]+map[nxt][j];
24         }
参考文献:http://www.cnblogs.com/CheeseZH/archive/2012/10/09/2717106.html

 

路由:静态配置,Rip协议,ospf 协议,BGP协议。

 

    原文作者:Dijkstra算法
    原文地址: https://blog.csdn.net/chelp/article/details/39294699
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞