数据结构——图

Posted szss

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构——图相关的知识,希望对你有一定的参考价值。

1.图是一种网状结构,分为有向图和无向图

2.图的顶点表示事件,边表示活动。

3.最小生成树算法:

3.1 prime算法---从任意一顶点出发,找权重最小的边

在带权连通图中V是包含所有顶点的集合, U已经在最小生成树中的节点,从图中任意某一顶点v开始,此时集合U={v},重复执行下述操作:在所有u∈U,w∈V-U的边(u,w)∈E中找到一条权值最小的边,将(u,w)这条边加入到已找到边的集合,并且将点w加入到集合U中,当U=V时,就找到了这颗最小生成树。

3.2 Kruskal算法---从权重最小的边出发

假设连通网G=(V,E),令最小生成树的初始状态为只有n个顶点而无边的非连通图T=(V,{}),图中每个顶点自成一个连通分量。在E中选择权值最小的边,若该边依附的顶点落在T中不同的连通分量中,则将此边加入到T中;否则,舍去此边而选下一条权值最小的边;依次类推,直到T中所有顶点都在同一个连通分量上(此时含有n-1边)为止,这时的T就是一棵最小的生成树。

4.图的最短路径:

4.1.Dijkstra算法

初使时令 S={V0},T={其余顶点},T中顶点对应的距离值, 若存在<V0,Vi>,为<V0,Vi>弧上的权值(和SPFA初始化方式不同),若不存在<V0,Vi>,为Inf。
从T中选取一个其距离值为最小的顶点W(贪心体现在此处),加入S(注意不是直接从S集合中选取,理解这个对于理解vis数组的作用至关重要),对T中顶点的距离值进行修改:若加进W作中间顶点,从V0到Vi的距离值比不加W的路径要短,则修改此距离值(上面两个并列for循环,使用最小点更新)。

重复上述步骤,直到S中包含所有顶点,即S=V为止(说明最外层是除起点外的遍历)。

例如:

技术分享图片

技术分享图片

4.2 Floyd算法
基本思想如下:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点到B,所以,我们假设dist(AB)为节点A到节点B的最短路径的距离,对于每一个节点K,我们检查dist(AK) + dist(KB) < dist(AB)是否成立,如果成立,证明从A到K再到B的路径比A直接到B的路径短,我们便设置 dist(AB) = dist(AK) + dist(KB),这样一来,当我们遍历完所有节点K,dist(AB)中记录的便是A到B的最短路径的距离。

 



以上是关于数据结构——图的主要内容,如果未能解决你的问题,请参考以下文章

什么是图数据库?

软件工程 -- 数据流图的画法

4非线性结构--图——数据结构基础篇

数据结构—图/无向图/连通图/连通分量/邻接矩阵/表/广度深度遍历

数据结构——图

如何画数据流图