数据结构-2004-02-06图1
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A 1 2 3 1 2 4 3 B C X J E F G H I
一. 图的定义
在一个n个顶点的无向图中,若每个顶点与其他n 在一个n个顶点的无向图中,若每个顶点与其他n-1个 顶点之间都有边,这样的图称为无向完全图 无向完全图. 顶点之间都有边,这样的图称为无向完全图. 个顶点的有向图中,若每个顶点与其它的n 在n个顶点的有向图中,若每个顶点与其它的n-1个顶 点之间都有弧存在,则称该图为有向完全图 点之间都有弧存在,则称该图为有向完全图 在图中, 是一条边, 在图中,若<Vi,Vj>是一条边,则称顶点 i和顶点 j是邻接 是一条边 则称顶点V 和顶点V
和顶点Vj上 的.并且称该边依附于顶点Vi和顶点 上. 并且称该边依附于顶点 和顶点
一个顶点的度是依附于该点的边数. 度:一个顶点的度是依附于该点的边数.
A 1 2 3 1 2 4 3 B C X J E F G H I
一. 图的定义
入度:在有向图中, 入度:在有向图中,依附于顶点的弧头数目称为该 点的入度. 点的入度. 出度:以某顶点为尾, 出度:以某顶点为尾,即依附于该顶点的弧尾数目 称为该点的出度. 称为该点的出度. 入度与出度之和称之为度. 度:入度与出度之和称之为度. 路径: 顶点Vi到顶点 的顶点序列Vi, 到顶点Vj的顶点序列 路径:从顶点 到顶点 的顶点序列 Vm, …,Vn, Vj,并且 并且
<Vs, 属于图G,则该序列称之为一条路径. <V Vt>属于图G,则该序列称之为一条路径. 属于图G,则该序列称之为一条路径 路径长:路径上边的数量. 路径长:路径上边的数量. 1 2 3 1 2 4 3 B C X J E F G H I A
6.2 图的存储
邻接矩阵
0 0 0 0 0 0
1 6 2 3 6 5 6 3 6 5 2 5 1 1 3 4 4 6 2
最小代价生成树: 6.4 最小代价生成树:克鲁斯卡尔方法
不断地判断是否形成圈.
最小代价生成树: 6.4 最小代价生成树:普莱姆方法
1将图中的点分为生成树点集V(T)和其他点集V(G),初始状态选定任意点置入V(T) 2V(T)中所有点伸出去到达非E(T)中点的长权重最小的一条边(u,v) 3u必然是E(T)中点, 将v加入到E(T)中 4 直到形成树为止
最小代价生成树: 6.4 最小代价生成树:克鲁斯卡尔方法
1 6 5 2 5 3 5 4 3 6 4 5 6 6 1 6 5 2 5 3 5 4 6 4 5 6 6 2 3 5 1 1 3 6 4 2
1 1 3 6 4 2
最小代价生成树: 6.4 最小代价生成树:克鲁斯卡尔方法
1 6 5 2 5 3 5 4 6 4 5 6 6 1 6 5 2 5 3 5 4 6 5 6 3 6 5 2 2 3 5 1 1 3 6 4 2
6.4 最小代价生成树
1 定义(生成树):对于图进行遍历,所 有走过的边以及结点构成一棵树, 称之为生成树. 1 2 3 5 6 4 2 1 3 5 广度优先搜索生成树 6 4
6.4 最小代价生成树
1 定义(生成树):生成树中代价最小的树称为最小代价生成树. 1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 该图的代价为: 6+1+5+5+5+3+6+4+2+6 6 2 3 1 1 5 4 3 4 6 5
算法与数据结构
第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 绪 论 线 性 表 栈和队列 串和数组 二叉树和树 图和广义表 排 序 查 找 文 件
第六章
图及广义表
6.1 图定义和术语 6.2 图的存储结构 6.3 图的遍历 广度优先 深度优先 图的遍历:广度优先 广度优先,深度优先 6.4 生成树 6.5 最短路径 6.6 拓扑排序 6.7 广义表
6.4 最小代价生成树:普莱姆方法 最小代价生成树:
1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 2 5 3 5 2 5 1 1 3 5 2 6 1 1 3 5 2 6 4 4
6.4 最小代价生成树:普莱姆方法 最小代价生成树:
该图的代价为: 6+1+5+3+4
最小代价生成树: 6.4 最小代价生成树:原理
从最小的代价以最小成本进行扩充
1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6
最小代价生成树: 6.4 最小代价生成树:克鲁斯卡尔方法
1将图中的边分为生成树边集E(T)和其他边集E(G),初始状态E(T)为空 2在图中找非E(T)中、未访问过的,而且权重最小的一条边(u,v) 3如果u, v以及边(u,v)加入到生成树T后,构成圈,则舍弃该边,否则,将该边以及点u,v加 入T 4 从原图中删除(u,v)边. 5 直到形成树为止
Algorithm BFS(V) //横向优先遍历的非递归算法,从v点开始 // visit[i]的初值均为0,表示未访问Biblioteka Baidu否则表示已访问 入队,置标记 While (队不空) { 出队 访问 未访问的邻接点入队,并置标记 } 4 2 5 8 6 3 7 1
6.4 最小代价生成树
1 定义 2 克鲁斯卡尔方法 3 莱姆方法 1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6
1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6
最小代价生成树: 6.4 最小代价生成树:克鲁斯卡尔方法
1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 1 6 5 2 5 3 5 4 3 6 4 2 5 6 6 1 6 5 2 5 3 5 4 3 6 4 2 5 6 6 1 6 5 2 5 3 5 4 3 6 4 5 6 6 1 1 3 6 4 2 1 1 3
6 6
∧ ∧
C1
C3 C4
C5 C6
图的运算: 6.3 图的运算:遍历
Algorithm DFS(V) //纵向优先遍历的递归算法,从v点开始 // visit[i]的初值均为0,表示未访问,否则表示已访问 Visit[v] = 1; Write(v); For 每一个点属于v的邻点x do If (visit[x] == 0) DFS(x); 8 4 2 5 6 3 7 1
不在需要判断圈.
算法实现: 1 存贮关键元素 2 实现算法
C1 C2
1 1 1 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0
C3 C4 C5 C6
C2 C5 C6
C1
C3 C4
6.2 图的存储
邻接表
C1 C2 C3 C4 C5 C6
∧ ∧
2 5 5 5
∧
3
4
∧
C2
1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6
最小代价生成树: 6.4 最小代价生成树:普莱姆方法
1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 1 3 1
1
6.4 最小代价生成树:普莱姆方法 最小代价生成树:
图的运算: 6.3 图的运算:遍历
Algorithm DFS(V) //纵向优先遍历的非递归算法,从v点开始 // visit[i]的初值均为0,表示未访问,否则表示已访问 入栈,标记表示已访问 循环以下内容 出栈 访问 邻点未标记的进栈,并标记 8 4 2 5 6 3 7 1
图的运算: 6.3 图的运算:遍历
1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 1 3 1 3 1 5 4
1 5 2 6 4
6.4 最小代价生成树:普莱姆方法 最小代价生成树:
1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 2 5 3 5 2 5 1 1 3 5 2 6 1 1 3 5 2 6 4 4
1 1 3 4 4 6 2
最小代价生成树: 6.4 最小代价生成树:克鲁斯卡尔方法
1 6 5 2 5 3 5 4 6 5 6 1 6 2 5 3 5 6 5 6 6 4 3 5 2 3 6 5 2 1 1 3 4 4 6 2
1 1 3 4 4 6 2
最小代价生成树: 6.4 最小代价生成树:克鲁斯卡尔方法
6.1 图的定义和术语
背景
北京 天津
上海 公路网
一. 图的定义
是由两个集合V(G) E(G)组成 记作G=(V,E). V(G)和 组成, 图G是由两个集合V(G)和E(G)组成,记作G=(V,E). 其中V(G)是图中顶点的非空有限集合,E(G) V(G)是图中顶点的非空有限集合,E(G)是图边的 其中V(G)是图中顶点的非空有限集合,E(G)是图边的 有限集合. 有限集合. 如果图中的边是有方向的,即边是顶点的有序对,则 如果图中的边是有方向的,即边是顶点的有序对, 称这样的图为有向图 此时,有向边也称为弧 有向图. 称这样的图为有向图.此时,有向边也称为弧,弧的起 点为弧尾 终点为弧头 表示为<V 弧尾, 弧头, >.若图中每条边 点为弧尾,终点为弧头,表示为<Vi,Vj>.若图中每条边 都是没有方向,则为无向图 都是没有方向,则为无向图
一. 图的定义
在一个n个顶点的无向图中,若每个顶点与其他n 在一个n个顶点的无向图中,若每个顶点与其他n-1个 顶点之间都有边,这样的图称为无向完全图 无向完全图. 顶点之间都有边,这样的图称为无向完全图. 个顶点的有向图中,若每个顶点与其它的n 在n个顶点的有向图中,若每个顶点与其它的n-1个顶 点之间都有弧存在,则称该图为有向完全图 点之间都有弧存在,则称该图为有向完全图 在图中, 是一条边, 在图中,若<Vi,Vj>是一条边,则称顶点 i和顶点 j是邻接 是一条边 则称顶点V 和顶点V
和顶点Vj上 的.并且称该边依附于顶点Vi和顶点 上. 并且称该边依附于顶点 和顶点
一个顶点的度是依附于该点的边数. 度:一个顶点的度是依附于该点的边数.
A 1 2 3 1 2 4 3 B C X J E F G H I
一. 图的定义
入度:在有向图中, 入度:在有向图中,依附于顶点的弧头数目称为该 点的入度. 点的入度. 出度:以某顶点为尾, 出度:以某顶点为尾,即依附于该顶点的弧尾数目 称为该点的出度. 称为该点的出度. 入度与出度之和称之为度. 度:入度与出度之和称之为度. 路径: 顶点Vi到顶点 的顶点序列Vi, 到顶点Vj的顶点序列 路径:从顶点 到顶点 的顶点序列 Vm, …,Vn, Vj,并且 并且
<Vs, 属于图G,则该序列称之为一条路径. <V Vt>属于图G,则该序列称之为一条路径. 属于图G,则该序列称之为一条路径 路径长:路径上边的数量. 路径长:路径上边的数量. 1 2 3 1 2 4 3 B C X J E F G H I A
6.2 图的存储
邻接矩阵
0 0 0 0 0 0
1 6 2 3 6 5 6 3 6 5 2 5 1 1 3 4 4 6 2
最小代价生成树: 6.4 最小代价生成树:克鲁斯卡尔方法
不断地判断是否形成圈.
最小代价生成树: 6.4 最小代价生成树:普莱姆方法
1将图中的点分为生成树点集V(T)和其他点集V(G),初始状态选定任意点置入V(T) 2V(T)中所有点伸出去到达非E(T)中点的长权重最小的一条边(u,v) 3u必然是E(T)中点, 将v加入到E(T)中 4 直到形成树为止
最小代价生成树: 6.4 最小代价生成树:克鲁斯卡尔方法
1 6 5 2 5 3 5 4 3 6 4 5 6 6 1 6 5 2 5 3 5 4 6 4 5 6 6 2 3 5 1 1 3 6 4 2
1 1 3 6 4 2
最小代价生成树: 6.4 最小代价生成树:克鲁斯卡尔方法
1 6 5 2 5 3 5 4 6 4 5 6 6 1 6 5 2 5 3 5 4 6 5 6 3 6 5 2 2 3 5 1 1 3 6 4 2
6.4 最小代价生成树
1 定义(生成树):对于图进行遍历,所 有走过的边以及结点构成一棵树, 称之为生成树. 1 2 3 5 6 4 2 1 3 5 广度优先搜索生成树 6 4
6.4 最小代价生成树
1 定义(生成树):生成树中代价最小的树称为最小代价生成树. 1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 该图的代价为: 6+1+5+5+5+3+6+4+2+6 6 2 3 1 1 5 4 3 4 6 5
算法与数据结构
第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 绪 论 线 性 表 栈和队列 串和数组 二叉树和树 图和广义表 排 序 查 找 文 件
第六章
图及广义表
6.1 图定义和术语 6.2 图的存储结构 6.3 图的遍历 广度优先 深度优先 图的遍历:广度优先 广度优先,深度优先 6.4 生成树 6.5 最短路径 6.6 拓扑排序 6.7 广义表
6.4 最小代价生成树:普莱姆方法 最小代价生成树:
1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 2 5 3 5 2 5 1 1 3 5 2 6 1 1 3 5 2 6 4 4
6.4 最小代价生成树:普莱姆方法 最小代价生成树:
该图的代价为: 6+1+5+3+4
最小代价生成树: 6.4 最小代价生成树:原理
从最小的代价以最小成本进行扩充
1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6
最小代价生成树: 6.4 最小代价生成树:克鲁斯卡尔方法
1将图中的边分为生成树边集E(T)和其他边集E(G),初始状态E(T)为空 2在图中找非E(T)中、未访问过的,而且权重最小的一条边(u,v) 3如果u, v以及边(u,v)加入到生成树T后,构成圈,则舍弃该边,否则,将该边以及点u,v加 入T 4 从原图中删除(u,v)边. 5 直到形成树为止
Algorithm BFS(V) //横向优先遍历的非递归算法,从v点开始 // visit[i]的初值均为0,表示未访问Biblioteka Baidu否则表示已访问 入队,置标记 While (队不空) { 出队 访问 未访问的邻接点入队,并置标记 } 4 2 5 8 6 3 7 1
6.4 最小代价生成树
1 定义 2 克鲁斯卡尔方法 3 莱姆方法 1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6
1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6
最小代价生成树: 6.4 最小代价生成树:克鲁斯卡尔方法
1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 1 6 5 2 5 3 5 4 3 6 4 2 5 6 6 1 6 5 2 5 3 5 4 3 6 4 2 5 6 6 1 6 5 2 5 3 5 4 3 6 4 5 6 6 1 1 3 6 4 2 1 1 3
6 6
∧ ∧
C1
C3 C4
C5 C6
图的运算: 6.3 图的运算:遍历
Algorithm DFS(V) //纵向优先遍历的递归算法,从v点开始 // visit[i]的初值均为0,表示未访问,否则表示已访问 Visit[v] = 1; Write(v); For 每一个点属于v的邻点x do If (visit[x] == 0) DFS(x); 8 4 2 5 6 3 7 1
不在需要判断圈.
算法实现: 1 存贮关键元素 2 实现算法
C1 C2
1 1 1 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0
C3 C4 C5 C6
C2 C5 C6
C1
C3 C4
6.2 图的存储
邻接表
C1 C2 C3 C4 C5 C6
∧ ∧
2 5 5 5
∧
3
4
∧
C2
1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6
最小代价生成树: 6.4 最小代价生成树:普莱姆方法
1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 1 3 1
1
6.4 最小代价生成树:普莱姆方法 最小代价生成树:
图的运算: 6.3 图的运算:遍历
Algorithm DFS(V) //纵向优先遍历的非递归算法,从v点开始 // visit[i]的初值均为0,表示未访问,否则表示已访问 入栈,标记表示已访问 循环以下内容 出栈 访问 邻点未标记的进栈,并标记 8 4 2 5 6 3 7 1
图的运算: 6.3 图的运算:遍历
1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 1 3 1 3 1 5 4
1 5 2 6 4
6.4 最小代价生成树:普莱姆方法 最小代价生成树:
1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 1 6 1 5 2 5 3 5 4 3 6 4 2 5 6 6 2 5 3 5 2 5 1 1 3 5 2 6 1 1 3 5 2 6 4 4
1 1 3 4 4 6 2
最小代价生成树: 6.4 最小代价生成树:克鲁斯卡尔方法
1 6 5 2 5 3 5 4 6 5 6 1 6 2 5 3 5 6 5 6 6 4 3 5 2 3 6 5 2 1 1 3 4 4 6 2
1 1 3 4 4 6 2
最小代价生成树: 6.4 最小代价生成树:克鲁斯卡尔方法
6.1 图的定义和术语
背景
北京 天津
上海 公路网
一. 图的定义
是由两个集合V(G) E(G)组成 记作G=(V,E). V(G)和 组成, 图G是由两个集合V(G)和E(G)组成,记作G=(V,E). 其中V(G)是图中顶点的非空有限集合,E(G) V(G)是图中顶点的非空有限集合,E(G)是图边的 其中V(G)是图中顶点的非空有限集合,E(G)是图边的 有限集合. 有限集合. 如果图中的边是有方向的,即边是顶点的有序对,则 如果图中的边是有方向的,即边是顶点的有序对, 称这样的图为有向图 此时,有向边也称为弧 有向图. 称这样的图为有向图.此时,有向边也称为弧,弧的起 点为弧尾 终点为弧头 表示为<V 弧尾, 弧头, >.若图中每条边 点为弧尾,终点为弧头,表示为<Vi,Vj>.若图中每条边 都是没有方向,则为无向图 都是没有方向,则为无向图