最短路径-迪杰斯特拉算法(Dijkstra Algorithm)

按路径长度递增的次序产生最短路径的算法。

大致思路:

求两顶点之间的最短路径,先一步步求出两点之间顶点的最短路径,基于已求出的最短路径的基础上,求得更远顶点的最短路径,最终得到结果。

Code:

#define MAXVEX 100

#define INFINITY 65535

typedef int Patharc[MAXVEX]; //用于存储最短路径下标的数组,其值代表结点前驱下标

typedef int ShortPathTable[MAXVEX]; //用于存储到各点最短路径的权值和

/*Dijkstra算法,将有向网G的v0顶点到其余顶点v最短路径P[v]及带权长度D[v]*/

/*P[v]的值为前驱顶点下标,D[v]表示v0到v的最短路径长度和*/

void ShortestPath_Dijkstra(MGraph G, int v0, Patharc *P, ShortPathTable *D)

{

    int v, w, k, min;

    int final[MAXVEX]; //final[w]=1表示求得顶点v0至vw的最短路径

    for (v = 0; v < G.numVertexes; v++) //初始化数据

    {

        final[v] = 0; //全部顶点初始化为未知最短路径状态

        (*D)[v] = G.arc[v0][v]; //将与v0点有连线的顶点加上权值

        (*P)[v] = 0; //初始化路径数组P为0

    }

    (*D)[v0] = 0; //v0至v0路径为0

    final[v0] = 1; //v0至v0不需要求路径

    //开始主循环,每次求得v0到某个v顶点的最短路径

    for (v = 1; v < G.numVertexes; v++)

    {

        min = INFINITY; //当前所知离v0顶点的最近距离

        for (w = 0; w < G.numVertexes; w++) //寻找离v0最近的顶点

            {

                if (!final[w] && (*D)[w] < min)

                {

                    k = w;

                    min = (*D)[w]; //w顶点离v0顶点更近

                }

            }

        final[k] = 1; //将目前找到的最近的顶点置为1

        for (w = 0; w < G.numVertexes; w++) //修正当前最短路径及距离

        {

        //如果经过v顶点的路径比现在这条路径的长度短的话

            if (!final[k] && (min + G.arc[k][w]) < (*D)[w])

            {//说明找到了更短的路径,修改D[w]和P[w]

                (*D)[w] = min + G.arc[k][w]; //修改当前路径长度

                (*P)[w] = k;

            }

        }

    }

}

时间复杂度:O(n^2)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 图的定义与术语 1、图按照有无方向分为无向图和有向图。无向图由顶点和边构成,有向图由顶点和弧构成。弧有弧尾和弧头之...
    unravelW阅读 435评论 0 0
  • Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,读大学时小编也学习过该算法,但理解不是特别透彻,利用...
    ITsCLG阅读 12,124评论 2 7
  • 最短路径 对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点是源点,...
    yinxmm阅读 2,449评论 0 1
  • 1736年,瑞士数学家Euler(欧拉)在他的一篇论文中讨论了格尼斯七桥问题,由此诞生了一个全新的数学分支——图论...
    不困于情阅读 4,472评论 0 9
  • 生活中我们每个人都有自己的角色定位,可能你是一位老板、一位职场精英、一位妻子、一位母亲、一位家庭主妇,无论是哪一种...
    景云6786阅读 400评论 0 3