• 贪心算法之单源最短路径


    问题:在一个有向网络中,从某点出发得到所有到该顶点的最短距离。

    迪杰斯特拉算法是解单源最短路径问题的一个贪心算法,其基本思想是,设置顶点集合S不断的贪心选择来扩充这个集合。当源点到该顶点的最短距离已知,则添加到集合来,最终包括网络中的所有顶点。

    贪心选择:

    step1:首先选择网络中的某一顶点V出发,那么该顶点肯定可以添加到S中,然后以V为源点,得到它到其他顶点的距离(初始化d[],表示V到其他顶点的距离)

    step2:在这些顶点中选择没有标记过的(即未添加到S集合中的点)  并且到V的距离最小的顶点V’,然后将其标记

    step3:更新d[],从V'出发遍历网络没有标记的顶点,如果找到一个点d[u]+edge[u][j]

    step4:重复step2

    性能分析:

          算法时间主要花在两个for循环中,时间复杂度为O(n2)

    代码实现:

    #include
    
    typedef char VertexType;
    typedef int EdgeType;
    #define MAX 20//定义数组大小
    #define INFINITY 500
    
    typedef struct 
    {
    VertexType vexs[MAX];
    EdgeType edges[MAX][MAX];
    int vexnum;//记录图的顶点数
    int arcnum;//记录图的边或弧的条数
    }AdjMatrix;
    //创建图的邻接矩阵
    AdjMatrix CreatGraph_Matrix(int graphtype)
    
  • 相关阅读:
    git常用操作-仓库创建、初始化、拉取项目
    【2022】年度总结
    1033 To Fill or Not to Fill
    【ARK UI】HarmonyOS ETS的启动页的实现
    链表(初探)
    LCR 180.文件组合
    浏览器缓存的优化方案和思路
    JavaScript 基础
    【JavaEE】网络编程
    【LLS-Player】webrtc m94 修改
  • 原文地址:https://blog.csdn.net/G11176593/article/details/128164933