最短路径问题Dijkstra算法的简单使用

图的应用非常广泛,下面就说说图的最短路径问题,使用的是Dijkstra,

其实就是将距离这个点最近的邻接点收进来,然后更新与其他点的距离,然后再收其他点

void Dijstra(Graph *G,int v0){
    int S[Maxsize] = {0};
    int dist[Maxsize];
    int path[Maxsize];
    for (int i = 0; i < G->vexnum; i++)
    {
        dist[i] = G->arcs[v0][i];
        if (dist[i]<1000)
        {
            path[i] = v0;
        }
        else
        {
            path[i] = -1;
        }
    }
    S[v0] = 1;
    dist[v0] = 0;
    path[v0] = -1;
    while (1)
    {
        int k;
        int a = 1000;
        int flag = 0;
        for (int j = 0; j < G->vexnum; j++)
        {
            if (S[j]==0)
            {
                flag = -1;
                if (S[j]<a)
                {
                    a = S[j];
                    k = j;
                }
            }

        }
        S[k] = 1;
        if (flag==0)
        {
            break;
        }
        for (int i = 0; i < G->vexnum; i++)
        {
            if (S[i] != 1 && dist[k] + G->arcs[k][i] < dist[i]) {
                dist[i] = dist[k] + G->arcs[k][i];
                path[i] = k;
            }
        }
    }


}

 

好了,我们下回见,peace

posted @ 2020-08-12 19:32  野评测  阅读(282)  评论(0)    收藏  举报