算法_图

本文详细介绍了图数据结构的基础知识,包括图的分类(有向图、无向图、带权图)、顶点的度、相关术语如简单图、完全图等。还探讨了图的两种常见表示方法——邻接矩阵和邻接表。接着,深入讨论了深度优先搜索(DFS)和广度优先搜索(BFS)算法,并提供了实例题目链接。


由顶点的集合和边的集合组成。表示一些事物或者状态的表达方法。

图1

顶点表示对象。边表示两个对象间的关系。

分类

​ 一个图的顶点对是有序的, 则可以称之为有向图。在对有向图中的顶点对排序后, 便可以在两
个顶点之间绘制一个箭头。 有向图表明了顶点的流向。

图2

​ 边没有指向性的图叫做无向图

图3

​ 可以为边赋予权值,来量化两个点之间的一些关系。边上带有权重的图叫做带权图。

图4

顶点的度

无向图中顶点的度表示以该顶点作为一个端点的边的数目。

​ 对于有向图,顶点度分为出度和入度。入度表示以该顶点为终点的入边数目,出度是以该顶点为起点的出边数目,该顶点的度等于其入度和出度之和。

不管是无向图还是有向图,顶点数n,边数e和顶点的度数有如下关系:
e = 1 2 Σ i = 1 n D ( V i ) e=\frac{1}{2}\Sigma_{i=1}^{n}{D(V_i)} e=21Σi=1nD(Vi)

相关术语

简单图:在图结构中,若不存在顶点到其自身的边,且同一条边不重复出现,则称这样的图为简单图。

无向完全图:在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图。含有n个顶点的无向完全图有n*(n-1)/2条边。

有向完全图:在有向图中,如果任意两个顶点之间都存在方向互为相反的两条弧,则称该图为有向完全图。含有n个顶点的有向完全图有n*(n-1)条边。

对于无向图,如果两个点之间有边连接,则称两个顶点互为邻接点(Adjacent),即两顶点相邻接。

无向图G中,如果从顶点V1到顶点V2有路径,则称V1和V2是连通的,如果对于图中任意两个顶点Vi和Vj都是连通的,则称G是连通图

图5

没有圈的连通图叫做。没有圈的非连通图叫做森林。一棵树的边数等于顶点数减去一。反之,边数等于顶点数减去一的连通图是一棵树。

有向图G中,如果对于每一对Vi到Vj都存在路径,则称G是强连通图。下图左侧并不是强连通图,右侧是。

图6

没有圈的有向图叫做DAG(有向无环图)。

图的表示

邻接矩阵

邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。

无向图

图7

-ABCD
A0101
B1011
C0100
D1100

无向图的邻接矩阵是一个对称矩阵(n阶矩阵的元满足a[i][j]=a[j]i)。

1表示两点间有边存在,0表示两点间没有边存在。

有向图

图8

-ABCD
A0100
B0011
C0100
D1000

每条边上带有权的图就叫

图9

-ABCD
A02
B073
C0
D40

∞表示两点间不可达。

邻接表

图中每个顶点Vi的所有邻接点构成一个线性表,由于邻接点的个数不确定,所以选择用单链表来存储。

图10

图11

深度优先搜索(DFS)

深度优先搜索(DFS)是用于遍历或搜索图数据结构的算法,该算法从根节点开始(图搜索时可选择任意节点作为根节点)沿着每个分支进行搜索,分支搜索结束后在进行回溯。在进入下一节点之前,树的搜索尽可能的加深。
DFS的搜索算法如下(以二叉树为例):

  • 假定根节点(图的任意节点可作为根节点)标记为N,
  • (L) : 递归遍历左子树,并在节点N结束。
  • ®: 递归遍历右子树,并在节点N结束。
  • (N): 访问节点N。

这些步骤可以以任意次序排列(先序遍历 中序遍历 后序遍历)。

例子

POJ 1111.

POJ 1562.

POJ 1753.

POJ 1979.

POJ 2386.

POJ 3194.

广度优先搜索(BFS)

​ 树或图形的访问也可以按照节点所处的级别进行遍历。在每次访问下一层级节点之前,遍历所在高层级的所有节点。BFS从根节点(图的任意节点可作为根节点)出发,在移动到下一节点之前访问所有相同深度水平的相邻节点。

例子

POJ 3984.

POJ 3414.

POJ 2251.

POJ 1426.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值