Dijkstra算法

朴素版Dijkstra算法

一.适用范围:

  单源最短路,所有边权都是正数,(朴素版Dijkstra 时间复杂度O(n的平方) ),稠密图(边数远远大于点数)

二.算法思路:

  1.初始化距离

  各个顶点到源点的距离为正无穷(memset(dist,0x3f,dist)源点本身到源点的距离为0(dist[1]=0);

  2.循环遍历

   s:当前已经确定最短距离的点;

   t:不在s中的,距离最近的点;

      将t加入到s中去;

   用t更新其他点的距离;

    

1
2
3
4
5
6
7
8
9
10
11
12
13
for(int i=0;i<n;i++)
{
    int t=-1;
    for(int j=1;j<=n;j++)
    {
        if(!str[j]&&(t==-1||dist[t]>dist[j])) t=j;
    }
    str[t]=1;
    for(int j=1;j<=n;j++)
   {
      dist[j]=min(dist[j],dist[t]+g[t][j]);
    }
}     

  

三:算法示例演示 

 

 

 邻接矩阵存图

 

 

 用一维数组dist[N]存储点1到各个顶点的距离

距离点1最近的点是点2,点2确定

 

 距离点2最近的点是点4,点4确定

 

 ...  ...

  

 

 

posted @   Mrr-  阅读(183)  评论(0)    收藏  举报
点击右上角即可分享
微信分享提示