图的基本概念

图(graph)是一种网状数据结构,图是由非空的顶点集合和一个描述顶点之间关系的集合组成的。其形式定义如下:
Graph = ( V,E )
V = {x|x∈某个数据对象}
E = {<u,v>|P(u,v)^(u,v ∈ V)}
V是具有相同特性的数据元素的集合,V中的数据元素通常称为顶点(Vertex)E是两个顶点之间关系的集合。P(u,v)表示u,v之间特定的关联属性。

有向图与无向图


若<u,v>属于E,则<u,v>表示从顶点u到顶点v的一条弧,并称u为弧尾或起始点,称v为弧头或终止点。若此时图中顶点之间的连线是有方向的,这样的图称为有向图(directed graph)
若<u,v>属于E则必有<v,u>属于E,即关系E是对称的,此时可以使用一个无序对(u,v)来代替两个有序对,它表示顶点u和顶点v之间的一条边,此时图中顶点之间的连线是没有方向的,这种图称为无向图(undirected graph)(无向图实际上也是有向图,是双向图)
在无向图和有向图V中的元素都称为顶点,而顶点之间的关系却有不同的称谓,即弧或边,为避免麻烦,在不影响理解的情况下,我们将其统称为边(edge)并且我们还约定顶点集与边级都是有限的,并记顶点与边的数量为|V|和|E|

加权图


在实际应用中,图不但需要表示元素之间是否存在某种关系,而且图的边往往与具有实际意义的数有关,即每条边都有与它相关的实数,称为权。这些权值可以表示从一个顶点到另一个顶点的距离或者消耗等信息。

图的存储结构

图有两种存储结构:顺序存储结构和链式存储结构
1.顺序存储结构(二维数组)

2.链式存储结构(链表)

图的遍历

图的遍历就是从图中某个顶点出发,按某种方法对图中所有顶点访问且仅访问一次。
深度优先遍历(DFS depth-first search):类似于树的先根遍历,是树的先根遍历的推广(可以采用递归或借助栈的非递归方式实现)
广度优先遍历(DFS breadth-first search):类似于树的层次遍历,它是树的层次遍历的推广(借助队列非递归方式实现)

无向图的深度优先遍历:0–>1–>3–>7–>4–>2–>5–>6
无向图的广度优先遍历:0–>1–>2–>3–>4–>5–>6–>7

无向图的深度优先遍历:A B E F C D G H I
无向图的广度优先遍历:A B C D E F G H I

最短路径

在许多应用领域,带权图都被用来描述某个网络,比如通信网络,交通网络等。在这种情况下,各边的权重就对应于两点之间通信的成本或交通费用。此时,一类典型的问题就是:在任意指定的两点之间如果存在通路,那么最小消耗是多少。这类问题实际上就是带权图中两点之间最短路径问题。
【问题:计算A到H的最短路径】

最短路径1:段数最少的最短路径(不考虑权重)
类似于树的层次遍历,需要借助队列来实现。对于已经检查过的节点,应将其标记为已检查,且不再检查它。否则可能会导致无限循环。可以找到即为可达,第一次找到,即为跳转最少。如果最后队列为空,表示没有路径可达。
最短路径:A–>C–>F–>H
最短路径2:权值最小的最短路径
解决方案:提克斯特拉算法

A可以直接到达的B、C、D三点,且其距离分别为3,5,6,A与B距离最近,因此将B从T数组提至S数组。

B可以直接到达C、E、F三点,且其距离分别为1、7、4,加上A到B之间的距离,即A通过B间接到C、E、F的距离分别为4、10、7,由于4比5小,因此将A到C的权重改为4,前一个结点改为B。因为B与C距离最近,因此将C从T数组提至S数组。

C可以直接到达D、F两点且其距离分别为1、2,加上A到C之间的权重4,即A通过C间接到达D、F的距离分别为5,6,比以前的距离更短,因此将结点D、F的权重改为5、6,前一个结点改为C。因为C与D距离最近,因此将D从T数组提至S数组。

D可以直接到达F、G两点且其距离分别为3、5,加上A到D之间的权重5,即A通过D间接到达F、G的距离分别为8、10,8>6即A通过D到达F的距离没有以前短,因此不改变。由于之前A无法达到G,现在通过D可以达到,将G的权重改为10,前一个结点改为D。因为D与F距离最近,因此将F从T数组提至S数组。

F可以直接到达E、G、H三点且其距离分别为2、1、9,加上A到F之间的权重6,即A通过F间接到达E、G、H的距离分别为8、7,15,都小于以前的距离,因此都要改变。因为F与G距离最近,因此将G从T数组提至S数组。

G可以直接到达H点且其距离为5,加上A到G之间的权重7,即A通过G间接到达H的距离为12,小于以前的距离15,因此将H的权重改为12,前一个结点改为G。现在T数组中只有E与H且H为目的地,因此将E提升至S数组。

E可以直接到达H点且其距离为6,加上A到E之间的权重8,即A通过E间接到达H的距离为14,大于以前的距离12,因此H的权重不改变。现在T数组中只有H结点,因此将H提升至S数组,T数组为空。

此时观察最后生成的表格,可以找到结点A到图中任意可达结点的最短路径和路径大小。

即A到H的最短路径为:A–>B–C-->F–>G–>H,最短长度为12。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值