数据结构Java版图1图基础及图遍历
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
邻接矩阵 (Adjacency Matrix)
在图的邻接矩阵表示中,有一个记录各个 顶点信息的顶点表,还有一个表示各个顶 点之间关系的邻接矩阵。
设图 A = (V, E)是一个有 n 个顶点的图, 图 的邻接矩阵是一个二维数组 A.edge[n][n], 定义:
1, 如果< i, j > E 或者 (i, j) E A.Edge [i][ j] 0, 否则
有向图和无向图
0 12
3
0 12 34 5 6
• 无向图:图的每条边都 没有方向,即边的2个顶 点没有次序关系
•(1,0),(0,1)是 同一条边
0
• 有向图:图的每条边都
是有方向的,即边的2个 顶点有次序关系。
1
•<0,1>,<1,0>是2条边
2
0
1
2
带权图(也称网)
• 权:图的边上的具有特定含义 的数值称为权。
广度优先搜索 遍历(BFS)
125
AB
E
1 25
AB
E
4D C3 G7 4D C3 G7
6F H
I
89
广度优先搜索过程
6F H
I
广度优先生成树
广度优先搜索遍历(BFS)基本思想
BFS在访问了起始顶点 v 之后, 由 v 出发, 依次 访问 v 的各个未被访问过的邻接顶点 w1, w2, …, wt, 然后再顺序访问 w1, w2, …, wt 的所有还未 被访问过的邻接顶点。再从这些访问过的顶点出 发,再访问它们的所有还未被访问过的邻接顶 点,… 如此做下去,直到图中所有顶点都被访 问到为止。 广度优先搜索是一种分层的搜索过程, 每向前走 一步可能访问一批顶点, 不像深度优先搜索那样 有往回退的情况。因此, 广度优先搜索不是一个 递归的过程。
强连通图与强连通分量
• 在有向图中,如果任意2个顶点之间都存 在可到达的路径,则称该有向图是强连通 图。有向图的极大连通子图称为该有向图 的强连通分量。
生成树
• 一个n个顶点的连通图的生成树是一个 极小连通子图,它含有图中所有的顶点, 但具有足以构成一棵树的n-1条边。
图的存储
• 邻接矩阵 • 邻接表
其中 V = { x | x 某个数据对象} 是顶点的有穷非空集合; E = {(x, y) | x, y V }
或 E = {<x, y> | x, y V && Path (x, y)} 是顶点之间关系的有穷集合,也叫 做边(edge)集合。Path (x, y)表示 从 x 到 y 的一条单向通路, 它是有 方向的。
图的遍历
从已给的连通图中某一顶点出发,沿着 一 些边访遍图中所有的顶点,且使每 个顶点仅被访问一次,就叫做图的遍历 ( Graph Traversal )。
图中可能存在回路,且图的任一顶点都可能与 其它顶点相通,在访问完某个顶点之后可能会 沿着某些边又回到了曾经访问过的顶点。
图的遍历的分类: 深度优先搜索遍历
DFS 在访问图中某一起始顶点 v 后, 由 v 出 发, 访问它的任一邻接顶点 w1; 再从 w1 出 发,访问与 w1邻 接但还没有访问过的顶点 w2; 然后再从 w2 出发, 进行类似的访问, … 如此进行下去, 直至到达所有的邻接顶点都 被访问过的顶点 u 为止。接着, 退回一步, 退到前一次刚访问过的顶点, 看是否还有其 它没有被访问的邻接顶点。如果有, 则访问 此顶点, 之后再从此顶点出发, 进行与前述类 似的访问; 如果没有, 就再退回一步进行搜索。 重复上述过程, 直到连通图中所有顶点都被访 问过为止。
0 子图
0
0
0
12
1
12
2
3
3
3
3
顶点的度和路径、路径长度
与顶点关联的边
0
数。顶点0的度 为2
1
2
0-1的路径和路径长度: 0-3-2-1,路径长度为3 0-1,路径长度为1 0-3-2-1-0-1,路径长度为5
3
AD 592
B 3C
入度为2 出度为1
连通图与 连通分量
• 在无向图中,如果任意2个顶点之间都 有路径,则称该无向图是连通图。无 向图的极大连通子图称为连通分量。
图
主要内容
• 图的基本概念 • 图的存储 • 图的连通性 • 图的生成树 • 图遍历 • 实践项目:图遍历演示程序
图的应用
• 公交网络系统 • 最短路径查询 • 物流系统 • 运输系统
基本概念
图 : 图是由顶点集合(vertex)及 顶点间的关系集合组成的一种数据 结构: Graph=( V, E )
A
0A
1
3
B
C 1B
2C
D
3D
0
2
1
0
同一个顶点发出的边链接在同一个边链表中,每一 个链结点代表一条边(边结点), 结点中有另一顶 点的下标 adjvex 和指针 nextarc。
2.有向图的邻接表和逆邻接表
A
data firstarc adjvex nextarc
0A
1
adjvex nextarc
• 带权图:图的每条边都带有一 个权,这样的图称为带权图, 也称网。
4 AD 592
A 52
B 3C
BC 3
子图
邻接顶点 如果 (u, v) 是 E(G) 中的一条边, 则称 u 与 v 互为邻接顶点。
子图 设有两个图 G=(V, E) 和 G‘=(V’, E‘)。若 V’ V 且 E‘E, 则称 图G’ 是 图G 的子图。
0
1
2
3
0 1 0 1
A. e dge
1 0
0 1
1 0
0 1
1 0 1 0
0
0 1 0
1
A.edge 1 0 1
0 0 0
2
• 无向图的邻接矩阵是对称的; • 有向图的邻接矩阵可能是不对称的。
邻接表 (Adjacency List)
1.无向图的邻接表
data firstarc adjvex nextarc adjvex nextarc
DFS (Depth First Search) 广度优先搜索 遍历
BFS (Breadth First Search)
深度优先搜索遍历 - DFS
123
AB
E
123
AB
E
7D C5 G4
7D C 5 G4
6F H
I
8 前进 9
深度优先搜索过程
6F H
I
回退
89
深度优先生成树
深度优先搜索遍历( DFS)基本思想
B
1B
0
2
2 C
C
邻接表 (出边表)
data firstarc adjvex nextarc
0A
1
1B
0
2C
1
逆邻接表 (入边表)
3.网络 (带权图) 的邻接表
A 5
6 9
D data firstarc Adjvex info nextarc
0A
15
36
21 B
28
B
C 8
2C
32
3D
19
(顶点表) (出边表)