当前位置:
文档之家› 济南大学数据结构(Java版)
济南大学数据结构(Java版)
称 v1 为弧尾,称 v2 为弧头。
< v1 , v2 > ≠ < v2 , v1 >
3. 完全图、有向完全图 有 2 n(n-1) 条边的无向图称为完全图。 有 n(n-1) 条弧的有向图称为有向完全图。
1
v1
v2
v1
v2
v3
v4
v3
4. 带权无向图(无向网) 和 带权有向图(有向网) 有时对图的边或弧赋予相关的数值,这种与图的边或弧相 关的数值叫做权。 A 5 B
0 0 0
3 1
0 0 0
4 0
0 1 0
v3
v4
有向图,顶点 vi 的出度是邻接矩阵中第 i 行的元素之和。
顶点 vi 的入度是邻接矩阵中第 i 列的元素之和。 例 v1 的度为 2+1=3。
v1
v3 v4 v1
v2
v5
无向图
1 2 3 4 5
1 0 1 0 1 0 1 0 0 0 1
2 1 0 1 0 1 2 1 0 0 0
1 2 A= 3 4 5 6
1 2 3 4 5 6 0 5 ∞ 7 ∞ ∞ ∞0 4 ∞ ∞ ∞ 8 ∞0 ∞ ∞ 9 ∞∞ 5 0 ∞ 6 ∞∞∞ 5 0 ∞ 3 ∞∞∞ 1 0
wij 若vi≠ vj,顶点 vi 与 vj 相邻接 aij =
∞ 0 若vi≠ vj,顶点 vi 与 vj 不相邻接 若vi= vj
1 0 1 0 1 0
2 1 0 1 0 1
3 0 1 0 1 1
4 1 0 1 0 0
5 0 1 1 0 0
无向图,顶点 vi 的度是邻接矩阵中第 i 行或第 i 列的元素之和。
例 G1中,v1 的度为 2 ,v2 的度为 3 。
例有向图 G
v1
v2
A(G) =
1 2 3 4
1 0
0 0 1
2 1
private OnelinkNode table[]; //图的邻接表
3 0 1 0 1 1
4 1 0 1 0 0 3 1 0 0 0
5 0 1 1 0 0 4 0 0 1 0
v2
1 2 3
v3
v4
有向图
4
无向图的邻接矩阵都是对称矩阵。 有向图的邻接矩阵一般不对称。
无向图可以采用 压缩存储方式
带权图(网) 的邻接矩阵 v1
3 5 7
v2
8 9
4
v6
1
v3
5
6
v5
5
v4
《数据结构(Java版)》
第1章 绪论 第2章 线性表 第 3章 串 第4章 栈与队列 第5章 数组和广义表 第6章 树和二叉树 第 7章 图 第8章 查找 第9章 排序
第七章
A
C D
图
B
E
图是一种较线性表和树更为复杂的数据结构。 线性表: 线性结构(前驱、后继) 树: 层次结构(父子) 图: 任意两个数据元素之间都可能相关(邻接)
v1
v2 v3
v4
7.1.5 生成树 一个连通图的生成树是一个极小连通子图。 极小连通图:在极小连通子图上,删除任一条边子图就不 再连通,若再增加一条边,必定构成一个环。 生成树的三要素: ①所有n个顶点;②有n-1条边;③图是连通的。
V1 V3 V4 V5 V2 图的 生成树 V4 V1 V3 V5 V2 V4 V3
距 离 耗 费
9 4 C 8 1 2 D E 7
这种带权的图通常称为网。
3
带权的无向图称为无向网。
带权的有向图称为有向网。
5. 邻接与关联 v v’
对于无向图 G=(V, E),如果边 (v, v’) ∈ E,则称顶点 v 和 v’ 互为
邻接点,即 v 和 v’ 相邻接。
边 (v, v’) 依附于顶点 v 和 v’ ,或者说 (v, v’) 与顶点 v 和 v’ 相关联。
B
H
L
H
7.2 图的存储结构
顺序存储 邻接矩阵 链式存储 邻接表
如何表达顶点之间 存在的关系?
7.2.1 邻接矩阵
设图 G = ( V ,E ) 具有 n(n≥1) 个顶点 v1 , v2 , … , vn 和 m 条边或弧 e1 , e2 , ,… em ,则 G 的邻接矩阵是 n×n 阶矩阵,记为 A(G) 。 邻接矩阵存放 n 个顶点信息和 n2 条边或弧信息。 其每一个元素 aij 定义为: 0 顶点 vi 与 vj 不相邻接
v2
v3
v4 v5
顶点 v3 的度为 3
对于有向图,顶点 v 的度 TD(V) 分为两部分——出度、入度。 以结点 v 为终点的弧的数目称为 v 的入度,记为ID(v) ; 以结点 v 为起点的弧的数目称为 v 的出度,记为OD(v); 顶点 v 的度为 TD(v) = ID(v) + OD(v)。
v4
V = { v1 , v2 , v3 , v4 , v5 }
v5
E = { ( v1 , v2 ) , ( v1 , v4 ) , ( v2 , v3 ) , ( v2 , v5 ) , ( v3 , v4 ) , ( v3 , v5 ) }
( v1 , v2 )表示顶点 v1 和 v2 之间的边
7.1 图的基本知识 7.1.1 图的定义
图 G 是由两个集合顶点集 V(G) 和边集 E(G) 组成的,记作 G=( V(G),E(G) ),简称G=(V,E)。 V是顶点的有穷非空集合 E是两个顶点之间的关系,即边的有穷集合
A A C C
B B
D D
E E
无向图和有向图 1. 无向图: 边是顶点的无序对,即边没有方向性。 v1 v3 v2
v0
v1
v2
...
vk-1
vk
顶点 v0 和 vk 分别称为路径 w 的起点和终点。 路径的长度是路径上的边的数目。 w 的长度为 k 如果在一条路径中,除起点和终点外,其他结点都不相同,则此路 径称为简单路径。 起点和终点相同且长度大于1的简单路径称为回路。
2. 有根的图和图的根
带权图中,从起点到终点的路径上各条边的权值之和称为这条
无向图、有向图的边或弧均计算两遍。
当G为有向图时,上式可写为:
i=1 n
∑
n
ID(vi)= ∑ OD(vi)=e
i=1 n
n
i=1
∑ TD(vi)=∑
i=1
ID(vi)+∑ OD(vi)=2e
i=1
n
7.1.3 子图 假设有两个图 G=(V, E) 和 G’=(V’, E’) ,如果 V’ V, 且 E’ E,并且E’中的边所关联的结点都在V’中,则称 G’ 为 G 的子图。 v2 v1
( v 1 , v2 ) = ( v 2 , v 1 )
2. 有向图: 其边是顶点的有序对,即边有方向性。
v1 v2
v3
V = { v1 , v2 , v3 , v4 }
v4
E = { < v 1 , v2 > , < v 1 , v 3 > , < v 3 , v 4 > , < v 4 , v 1 > } 通常有向图的边称为弧,< v1 , v2 >表示顶点 v1 到 v2 的弧。
V1
V2 V5
对非连通图,则称由各个连通分量的生成树的集合为 此非连通图的生成森林。
性质: 一个有n个顶点的连通图的生成树有且仅有n-1条边。 1. 如果一棵生成树有 n 个顶点和小于 n-1 条边,则为非连通图。 构成一棵 n 顶点生成树需要 n-1 条边,
少于 n-1 ,则必有边断开,不再连通。
data
next
data : 顶点的信息 next : 第一条关联边结点
data : 结点数据元素信息
next : 与该结点关联的另一条边
声明邻接表存储的图类
import ds_java.OnelinkNode; public class Graph2 {
//单向链表的结点类 //以邻接表存储的图类
v1 v3 v4
v2
是否为连通图
v5
连通分量指的是无向图中的极大连通子图。
极大连通子图:将图中,任何不在连通子图中的顶点,加到子图中后,子图 就不再是连通的。
A
B
C
F L A
D
G
E
H H
非连通图 连通图的 连通分量是其自身 而非连通图 可以有多个
B
连通分量为
C
G
D H E
F
H
L
4. 强连通图
有向图G,如果从顶点 v 到顶点 v’ 有路径 或 从顶点 v’ 到顶点 v 有 路径,则称 v 和 v’ 是连通的。
在有向图 G 中,如果对于每一对 vi, vj ∈V,vi≠vj ,从 vi 到 vj 和 从
vj 到 vi 都存在路径,则称 G 是强连通图。
v1
v2
是否为强连通图
v3
v4
有向图中的强连通的最大子图称作有向图的强连通分量。
v1
注意
v2
非强连通图
v3
v4
强连通分量 强连通图的 强连通分量是其自身 而非强连通图 可以有多个
v
点 v’,顶点 v’ 邻接自顶点 v 。 弧 <v, v’> 和顶点 v, v’ 相关联。
v’
对于有向图 G=(V, E) ,如果弧 <v, v’> ∈ E,则称顶点 v 邻接到顶
7.1.2 结点的度 1. 度、入度、出度
对于无向图,结点 v 的度是和 v 相关联的边的数目,记做TD(v)。
v1
2. 如果一棵生成树有 n 个顶点和多于 n-1 条边,则一定有环。 构成一棵 n 顶点生成树需要 n-1 条边,