考研天勤 数据结构 图的算法
两种特殊的存储结构十字表与邻接多重表
顶点存数据和第一个边的指针,边存练连的顶点和两个端点的兄弟边(即下一条边)
十字表(有向图)
节点和边分开存
顶点:数据 第一个入边指针 第一个出边指针
边:尾点 头点 同头兄弟边指针 同尾兄弟边指针 边的信息
邻接多重表(无向图)
节点和边分开存
节点:数据 第一个边
边:Mark标记 i节点 i连的边 j节点 j连的边 边的信息
生成树算法
Prim算法(选点)
初始化:vis数组与dist数组,初始化的时候已经放入了第一个点,所以第一层循环是进行n-1次循环,如果发现选出的点的距离是无穷大则说明此连通分量已经找完,跳出算法(本代码没有实现)
Kruskal算法(选边)
每次从图中选出一个最小的边放进生成树中,加入时不能让生成树成为环,用并查集的方式,如果要加入的边的两个顶点有共同的祖先,则不加入此边,若边符合条件,则加入后应进行并查集合并,合并公共祖先。
初始化:因为每个边的长度不会再改变ÿ