欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

算法分析与实践-作业2-Dijkstra算法求最短距离

程序员文章站 2024-03-16 14:05:04
...

1. 问题

对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径。
算法分析与实践-作业2-Dijkstra算法求最短距离

2. 解析

Dijkstra算法通过从起始节点往相邻节点不断进行扫描,更新dist数组、path数组和set数组。然后遍历set集合中设0的顶点,假如扫描点为b点,接下来遍历顶点c、d、e、f、g和h。首先是c点,从a=>b=>c没有直接相邻线段,所以a=>b=>c距离设置为无穷大,不对dist和path进行更新;然后d点……

算法分析与实践-作业2-Dijkstra算法求最短距离

3. 设计

    for(i = 0; i < N; i++){
        min_dis = INF;
        for(j = 0; j < N; j++){
            if(used[j] == 0 && distance[j] < min_dis){
                min_node = j;
                min_dis = distance[j];
                pass_flag++; // 标记是否存在通路
            }
        }
        if(pass_flag != 0){
            used[min_node] = 1;
            for(j = 0; j < N; j++){
                if(used[j] == 0){
                    if(adj_arr[min_node][j] < INF && distance[min_node] + adj_arr[min_node][j] < distance[j]){
                        distance[j] = distance[min_node] + adj_arr[min_node][j];
                        path[j] = min_node;
                    }
                }
            }
        }else{
            printf("There is no path!\n");
            return;
        }
}

4. 分析

在shortest_path()函数中存在两个长度为N的for循环,故其时间复杂度为O(n^2)。

5. 源码

https://github.com/kekekeQWQ/2-2