数据结构(Java)图
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大家好
第7章 图
基本内容
1.图的定义和基本术语 2.图的存储结构 3.图的遍历 4.图的最小生成树 5.最短路径
一.图的定义和基本术语
Neusoft
NEXT
一.图的定义和基本术语
Neusoft
NEXT
一.图的定义和基本术语
Neusoft
NEXT
一.图的定义和基本术语
Neusoft
NEXT
一.图的定义和基本术语
A[i,j]10, 若 , (vi其 ,vj)或 它 vi,vj E(G)
Neusoft
NEXT
二.图的存储结构
1.邻接矩阵表存储
Neusoft
NEXT
二.图的存储结构
1.邻接矩阵表存储
Neusoft
NEXT
二.图的存储结构
2.邻接表存储
邻接表存储是将顺序存储与链式存储结合的存储方法。
邻接表表示法类似于树的孩子链表表示法。
Neusoft
NEXT
三.图的遍历
ຫໍສະໝຸດ Baidu
2.广度优先遍历
A
F
D
W
S
T
遍历结果为A,F,D,S,T,W
Neusoft
NEXT
三.图的遍历
2.广度优先遍历
void bsf(int index) { //找不到指定顶点,退出 if(vertexs[index] == null) return;
//创建队列,用于存放访问过的结点 QStore q = new QStore(vertexs.length);
对于图G中的每一个顶点vi,将所有与顶点vi有连线的顶点vj连成一个单链表, 这个单链表就称为顶点vi的邻接表,再将所有顶点的邻接表表头放到数组中,就 构成了图的邻接表。
Neusoft
NEXT
二.图的存储结构
2.邻接表存储
Neusoft
NEXT
二.图的存储结构
2.邻接表存储
Neusoft
no
NEXT
三.图的遍历
1.深度优先遍历 (DFS)
图的深度优先遍历是以图的某一顶点V0作为出发点,首先访问该点,然后依次 从V0的各个未被访问的邻接点出发,进行深度优先遍历,直至图中所有和V0相 通的顶点都被访问到。若此时图中还有顶点未被访问,则以该顶点为起点重复上 述访问过程,直至图中所有顶点都被访问到为止。
//创建栈,用于记录已访问结点 Stack s = new Stack(vertexs.length);
vertexs[index].visit(); s.push(index);
Neusoft
NEXT
三.图的遍历
1.深度优先遍历
//如果栈不为空,继续 while(!s.isEmpty()) {
index = fNeighbor(s.peek()); if(index != -1) {
2.图的基本术语
4)顶点的度
对于无向图,顶点的度是指与该顶点连接的边的数目。顶点A的度可以表示为 deg(A) 。
对于有向图,顶点的度分为出度与入度。在有向图中,顶点的出度是指由该顶点 出发的边的数目,用outdeg()表示;顶点的入度是指指向该顶点边的数目, 用indeg()表示。
Neusoft
NEXT
2)完全图 完全图是指图的边数达到最大值,即图中每两个点之间都有边。
完全无向图
A
D
S
T
Neusoft
NEXT
一.图的定义和基本术语
Neusoft
NEXT
一.图的定义和基本术语
2.图的基本术语
3)带权图 带权图是指图中的每条边具有一个权值。
9
A
K
5
F
1
3
D
8
S
T
Neusoft
NEXT
一.图的定义和基本术语
一.图的定义和基本术语
2.图的基本术语
5)路径、简单路径和回路 路径是从一个顶点到另一个顶点所经过的顶点序列。
简单路径是指一条路径上,除起点与终点外,其余顶点均不相同的路径。
若路径的起点与终点相同,则该路径称为回路。
Neusoft
NEXT
一.图的定义和基本术语
2.图的基本术语
6)连通图 在图中,从任意一个顶点出发有路径可以到达该图中的其他任意一个顶点,则该 图为连通图,否则该图为非连通图。
1.图的定义
A
D
T
Q
W
G
集合V和集合E分别为:
S
V(G)={A,D,T,G,S,W,Q}
E(G)={(A,D),(T,G),(D,T),(G,W),(D,S),(W,S),
(A,S),(A,Q)}
Neusoft
NEXT
一.图的定义和基本术语
Neusoft
NEXT
一.图的定义和基本术语
2.图的基本术语
Neusoft
NEXT
三.图的遍历
Neusoft
NEXT
三.图的遍历
Neusoft
NEXT
三.图的遍历
遍历结果为: A,B,E,D,F,C
A,E,D,F,C,B
Neusoft
NEXT
三.图的遍历
1.深度优先遍历
void dsf(int index) {
//未找到指定结点,退出 if(vertexs[index] == null) return;
//访问结点 vertexs[index].visit(); s.push(index); } else s.pop(); }
//清空所有访问标志
clean();
}
Neusoft
NEXT
三.图的遍历
2.广度优先遍历
广度优先遍历从图的某一顶点V0出发,依次访问V0未被访问过的邻接点,然后 分别从这些邻接点出发,广度优先遍历图,直至所有邻接点都被访问到。若此时 图中尚有顶点未被访问,则以该顶点作为起点,重复上述过程,直至图中所有顶 点都被访问为止。
while((i=fNeighbor(index)) != -1) {
vertexs[i].visit();
q.push(i);
}
}
Neusoft
NEXT
三.图的遍历
Neusoft
NEXT
三.图的遍历
//访问指定结点 vertexs[index].visit();
Neusoft
NEXT
三.图的遍历
2.广度优先遍历
//将访问过的接点入队 q.push(index);
//当队列为空时,遍历结束 while(!q.isEmpty()) {
index = q.pop(); int i;
//找队头结点所有的邻接结点,并标记
Neusoft
NEXT
Neusoft
NEXT
Neusoft
NEXT
二.图的存储结构
1.邻接矩阵表存储
邻接矩阵存储是用一维数组存储图中顶点的信息,用矩阵表示图中各顶点之间的 邻接关系。若图G=(V,E)有n个顶点,则A={v0,v1,…,vn-1}表示G中各顶点相 邻关系为一个n×n的矩阵,矩阵中元素的值为:
第7章 图
基本内容
1.图的定义和基本术语 2.图的存储结构 3.图的遍历 4.图的最小生成树 5.最短路径
一.图的定义和基本术语
Neusoft
NEXT
一.图的定义和基本术语
Neusoft
NEXT
一.图的定义和基本术语
Neusoft
NEXT
一.图的定义和基本术语
Neusoft
NEXT
一.图的定义和基本术语
A[i,j]10, 若 , (vi其 ,vj)或 它 vi,vj E(G)
Neusoft
NEXT
二.图的存储结构
1.邻接矩阵表存储
Neusoft
NEXT
二.图的存储结构
1.邻接矩阵表存储
Neusoft
NEXT
二.图的存储结构
2.邻接表存储
邻接表存储是将顺序存储与链式存储结合的存储方法。
邻接表表示法类似于树的孩子链表表示法。
Neusoft
NEXT
三.图的遍历
ຫໍສະໝຸດ Baidu
2.广度优先遍历
A
F
D
W
S
T
遍历结果为A,F,D,S,T,W
Neusoft
NEXT
三.图的遍历
2.广度优先遍历
void bsf(int index) { //找不到指定顶点,退出 if(vertexs[index] == null) return;
//创建队列,用于存放访问过的结点 QStore q = new QStore(vertexs.length);
对于图G中的每一个顶点vi,将所有与顶点vi有连线的顶点vj连成一个单链表, 这个单链表就称为顶点vi的邻接表,再将所有顶点的邻接表表头放到数组中,就 构成了图的邻接表。
Neusoft
NEXT
二.图的存储结构
2.邻接表存储
Neusoft
NEXT
二.图的存储结构
2.邻接表存储
Neusoft
no
NEXT
三.图的遍历
1.深度优先遍历 (DFS)
图的深度优先遍历是以图的某一顶点V0作为出发点,首先访问该点,然后依次 从V0的各个未被访问的邻接点出发,进行深度优先遍历,直至图中所有和V0相 通的顶点都被访问到。若此时图中还有顶点未被访问,则以该顶点为起点重复上 述访问过程,直至图中所有顶点都被访问到为止。
//创建栈,用于记录已访问结点 Stack s = new Stack(vertexs.length);
vertexs[index].visit(); s.push(index);
Neusoft
NEXT
三.图的遍历
1.深度优先遍历
//如果栈不为空,继续 while(!s.isEmpty()) {
index = fNeighbor(s.peek()); if(index != -1) {
2.图的基本术语
4)顶点的度
对于无向图,顶点的度是指与该顶点连接的边的数目。顶点A的度可以表示为 deg(A) 。
对于有向图,顶点的度分为出度与入度。在有向图中,顶点的出度是指由该顶点 出发的边的数目,用outdeg()表示;顶点的入度是指指向该顶点边的数目, 用indeg()表示。
Neusoft
NEXT
2)完全图 完全图是指图的边数达到最大值,即图中每两个点之间都有边。
完全无向图
A
D
S
T
Neusoft
NEXT
一.图的定义和基本术语
Neusoft
NEXT
一.图的定义和基本术语
2.图的基本术语
3)带权图 带权图是指图中的每条边具有一个权值。
9
A
K
5
F
1
3
D
8
S
T
Neusoft
NEXT
一.图的定义和基本术语
一.图的定义和基本术语
2.图的基本术语
5)路径、简单路径和回路 路径是从一个顶点到另一个顶点所经过的顶点序列。
简单路径是指一条路径上,除起点与终点外,其余顶点均不相同的路径。
若路径的起点与终点相同,则该路径称为回路。
Neusoft
NEXT
一.图的定义和基本术语
2.图的基本术语
6)连通图 在图中,从任意一个顶点出发有路径可以到达该图中的其他任意一个顶点,则该 图为连通图,否则该图为非连通图。
1.图的定义
A
D
T
Q
W
G
集合V和集合E分别为:
S
V(G)={A,D,T,G,S,W,Q}
E(G)={(A,D),(T,G),(D,T),(G,W),(D,S),(W,S),
(A,S),(A,Q)}
Neusoft
NEXT
一.图的定义和基本术语
Neusoft
NEXT
一.图的定义和基本术语
2.图的基本术语
Neusoft
NEXT
三.图的遍历
Neusoft
NEXT
三.图的遍历
Neusoft
NEXT
三.图的遍历
遍历结果为: A,B,E,D,F,C
A,E,D,F,C,B
Neusoft
NEXT
三.图的遍历
1.深度优先遍历
void dsf(int index) {
//未找到指定结点,退出 if(vertexs[index] == null) return;
//访问结点 vertexs[index].visit(); s.push(index); } else s.pop(); }
//清空所有访问标志
clean();
}
Neusoft
NEXT
三.图的遍历
2.广度优先遍历
广度优先遍历从图的某一顶点V0出发,依次访问V0未被访问过的邻接点,然后 分别从这些邻接点出发,广度优先遍历图,直至所有邻接点都被访问到。若此时 图中尚有顶点未被访问,则以该顶点作为起点,重复上述过程,直至图中所有顶 点都被访问为止。
while((i=fNeighbor(index)) != -1) {
vertexs[i].visit();
q.push(i);
}
}
Neusoft
NEXT
三.图的遍历
Neusoft
NEXT
三.图的遍历
//访问指定结点 vertexs[index].visit();
Neusoft
NEXT
三.图的遍历
2.广度优先遍历
//将访问过的接点入队 q.push(index);
//当队列为空时,遍历结束 while(!q.isEmpty()) {
index = q.pop(); int i;
//找队头结点所有的邻接结点,并标记
Neusoft
NEXT
Neusoft
NEXT
Neusoft
NEXT
二.图的存储结构
1.邻接矩阵表存储
邻接矩阵存储是用一维数组存储图中顶点的信息,用矩阵表示图中各顶点之间的 邻接关系。若图G=(V,E)有n个顶点,则A={v0,v1,…,vn-1}表示G中各顶点相 邻关系为一个n×n的矩阵,矩阵中元素的值为: