图(一).

Slides:



Advertisements
Similar presentations
三级偏软考点. 第一章必考点 1. 计算机的进位数制 (1) 计算机中所有数据是二进制 0,1 表示 (2) 在现实生活中人们普遍使用十进制 如何把十进制转换成计算机所识别的二 进制?整数是除 2 取余法,小数是乘 2 取 整法.
Advertisements

第七章 图 7.1 图的定义和术语 7.2 图的存储结构 7.3 图的遍历 7.4 图的连通性问题 7.5 有向无环图及其应用
复习:树 树的基本概念和术语 二叉树的概念及性质 二叉树的存储结构 遍历二叉树 线索二叉树 树的应用:哈夫曼树 顺序存储 链式存储 递归算法
导入新课 请欣赏川剧变脸的视频以及各种变脸的脸谱。.
最大团问题 回溯法应用 作者:余新华 时间:
图 2008赛前知识点梳理三.
数据结构 第7章 图.
第六章 图(一).
第七章 图 (Graph)
Ch.7 图 图是一种复杂的非线性结构 应用:AI、工程、数学、生物、计算机 结点间的逻辑关系:任两个结点都可能相关
第9章 图 图的基本概念 图的存储结构 图的实现 图的遍历 最小生成树 最短路径 拓扑排序 关键路径 主要知识点.
第3章 算法与数据结构_c语言描述 3.1 计算机的问题求解模型 3.2 C语言基础 3.3 算法与数据结构的基本概念 3.4 线性结构
第七章 图 7.1 图的基本概念 7.2 图的存储表示 7.3 图的遍历 7.4 图的生成树 7.5 最短路径 7.6 拓扑排序
第七章 图 1、图的基本概念 2、图的存储表示 3、图的遍历与连通性 4、最小代价生成树 5、最短路径问题 6、AOV网络和AOE网络.
图的遍历.
Chapter 6 Graphs.
复习.
强连通分量 无向图 1、任意两顶点连通称该图为连通图 2、否则将其中的极大连通子图称为连通分量 A D C B E 有向图
第七章 图.
7.1 抽象数据类型图的定义 7.2 图的存储表示 7.3 图的遍历 7.4 最小生成树 7.5 重(双)连通图和关节点
第七章 图.
知识点回顾 生成树、生成森林 概念、生成过程 最小生成树 概念、 MST 性质 普里姆算法和克鲁斯卡尔算法.
第 4章 串和数组(二) 本讲主要内容: 数组的定义及其顺序表示和实现。 矩阵的压缩存储。 广义表的定义。
第七章 图 知识点2:图的存储结构.
第七章 图 东南大学计算机学院 方效林 本课件借鉴了清华大学殷人昆老师 和哈尔滨工业大学张岩老师的课件.
第7章 图 本章主题:图的基本概念、图的存储结构和图的常用算法 教学目的: 教学重点:图的各种存储方式及其运算
第6章 图 6.2图的存储结构 6.3图的遍历 6.4图的连通性 6.5 最短路径 6.6 AOV网与拓扑排序 6. 7 AOE网与关键路径
数据结构 复习课 王彦 博士,副教授
第七章 图.
数据结构 Data Structure CSU 主讲人:王国军,郑瑾 中南大学信息院计科系
第6章 图 北京师范大学 教育技术学院 杨开城.
数据结构 芦溪中学 胡小妹.
第7章 图 7.1 图的定义和术语 7.2 图的存储结构 7.3 图的遍历 7.4 图的连通性问题 7.5 有向无环图的应用
第七章 图.
使用矩阵表示 最小生成树算法.
第五章 数组 5.1 数组的定义 5.2 数组的表示和实现* 5.3 数组的压缩.
无向树和根树.
第 五 章 图 论 (第二部分) 1. 通路 2. 图的连通性.
数据结构概论 第7章 图 董黎刚 浙江工商大学信电学院 2019年4月8日.
第6章 图 本章中介绍下列主要内容: 图的定义 图的存储结构 图的遍历操作 图的几个典型问题.
知识点回顾 拓扑排序 关键路径 应用领域、求解步骤、算法实现过程 应用领域 求解步骤
第八章 图 图的基本概念 图的存储表示 图的遍历与连通性 最小生成树 最短路径 活动网络.
Graphs.
8.1 图的基本概念 8.2 图的存储结构 8.3 图的遍历 8.4 生成树 8.5 最短路径 8.6 拓扑排序 8.7 关键路径
数据结构学位考 复习课(3) 主要内容: 1. 图 2.查找、排序.
复习 图的定义和术语 图(Graph)、有向图、无向图、子图、有向完全图 、完全图、稀疏图、稠密图、权、网、邻接点、相关边、度、路径、路径长度、回路、简单路径、简单回路、连通、连通图、连通分量、强连通图、强连通分量、生成树 图的存储方法 给定一个图,画出邻接矩阵、邻接表 图的邻接矩阵和邻接表的存储算法.
顺序表的删除.
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
常宝宝 北京大学计算机科学与技术系 数据结构(六) 常宝宝 北京大学计算机科学与技术系
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
图(二).
知识点回顾 图的深度优先和广度优先遍历思想 图的深度优先遍历算法(用邻接表作为存储结构) 图的广度优先遍历算法(用邻接矩阵作为存储结构)
1.设A和B是集合,证明:A=B当且仅当A∩B=A∪B
树和图 tree and graph 蔡亚星.
第七、八次实验要求.
樂理教學                 茄苳國小蔡逸凡老師.
第六章 图 本章的主要内容是: 图的逻辑结构 图的存储结构及实现 图的连通性 最小生成树 最短路径 AOV网与拓扑排序 AOE网与关键路径.
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
数据结构概论 第5章 数组和广义表 董黎刚 浙江工商大学信电学院.
第七章 图 £7.1 图的定义和术语 £7.2 图的存储结构 £7.3 图的遍历 £7.4 图的连通性问题 £7.5 有向无环图及其应用
4.2 图的存储结构(cont.) v1 v2 v3 v4 v5 vertex= v1 v2 v3 v4 v5 v
第六章 图.
数据结构 第六章 图.
树的基本概念.
第三部分 图论 本部分主要内容 图的基本概念 树 欧拉图与哈密顿图 二部图与匹配 平面图 着色.
第7章 图.
§4.5 最大公因式的矩阵求法( Ⅱ ).
第二章 线性表 东南大学计算机学院 方效林 本课件借鉴了清华大学殷人昆老师 和哈尔滨工业大学张岩老师的课件.
1、图的基本概念 2、图的存储结构 3、图的遍历与连通性
最小生成树 最优二叉树.
Presentation transcript:

图(一)

主要内容 (1)图的定义和术语 (2)图的存储结构

图的概念和基本术语 图可以表示为G=( V, E ) V表示顶点的非空有限集合。 E表示两个顶点之间关系的集合。 顶点:图中的数据元素 B A C D V表示顶点的非空有限集合。 E表示两个顶点之间关系的集合。 图可以表示为G=( V, E ) V={vi| vi∈dataobject} E={( vi,vj)| vi, vj ∈V ∧P(vi, vj)} 其中,G表示一个图,V是图G中顶点的集合,E是图 G中边的集合,集合E中P(vi,vj)表示顶点vi和顶点vj之 间有一条直接连线,即偶对(vi,vj)表示一条边。

图的概念和基本术语 v1 v2 v3 v4 v5 在该图中: 集合V={v1,v2,v3,v4,v5}; 集合E=(v1,v2),(v1,v4),(v2,v3),(v3,v4), (v3,v5),(v2,v5)}

图的概念和基本术语 v1 v2 v3 v4 v5 B A C D (1)无向图。在一个图中,如果任意两个顶点构成的偶对(vi, vj)∈E是无序的,即顶点之间的连线是没有方向的,则称该图为无向图。 (2)有向图。在一个图中,如果任意两个顶点构成的偶对(vi, vj)∈E是有序的,即顶点之间的连线是有方向的,则称该图为有向图。

图的概念和基本术语 在有向图中,<V1,V3>表示从V1到V3的一条弧。 V1为弧尾或初始点,V3为弧头或终端点。

图的概念和基本术语 G=( V, E ) 注意:在无向图中(V1,V3)和(V3,V1)的区别, 顶点集合V={V1 , V2 , V3 , V4 } 弧的集合E={<V1 ,V3>, <V3 ,V4>, <V2 ,V4>, <V4,V1>} V1 V3 V2 V4 顶点集合V={V1 , V2 , V3 , V4 } 边的集合E={(V1, V3), (V1, V2), (V1, V4),(V2, V4)} 注意:在无向图中(V1,V3)和(V3,V1)的区别, 以及在有向图中<V1,V3>与<V3,V1>的区别。

图的概念和基本术语 (3)顶点、边、弧、弧头、弧尾。 B A C D

图的概念和基本术语 完全图 稀疏图(边数<n×logn)和稠密图 有向完全图:有n×(n-1)条弧的有向图

图的概念和基本术语 邻接点 对于无向图G=(V,E),如果边(V,V’)E,则称顶点V,V’互为邻接点 则称顶点V邻接到顶点V’,顶点V’邻接于顶点V V1 V3 V2 V4 无向图 V1 V3 V2 V4 有向图

图的概念和基本术语 子图:设有两个图G=(V,E)和图G’=(V’,E’),若V’V 且 E’ E ,则称G’为G的子图 A B C D

图的概念和基本术语 权:与图的边或弧相关的数。 网(或赋权图):带权的图。 顶点的度(TD(V)):依附于该顶点的边数或弧数。 出度(OD(V)):(仅对有向图)以该顶点为尾的弧数。 入度(ID(V)):(仅对有向图)以该顶点为头的弧数。 对于有向图,TD(V)=OD(V)+TD(V) 3 5 B A C D B A C D 2 4 1 6

图的概念和基本术语 路径:是一个顶点序列。 路径长度:路径上边或弧的数目。 简单路径:表示路径的顶点序列中的顶点各不相同。 回路(环):第一个顶点和最后一个顶点相同 (即V=V’)的路径。 简单回路:除了第一个和最后一个顶点外,其余各顶点均不重复出现的回路。 3 5 A B C 2 4 1 6 D

图的概念和基本术语 连通的、连通图、连通分量。在无向图中,如果从一个顶点vi到另一个顶点vj(i≠j)有路径,则称顶点vi和vj是连通的。如果图中任意两顶点都是连通的,则称该图是连通图。无向图的极大连通子图称为连通分量。图 (a)中有两个连通分量,如图 (b)所示。

图的概念和基本术语 强连通图、强连通分量。对于有向图来说,若图中任意一对顶点vi 和vj(i≠j)均有从一个顶点vi到另一个顶点vj有路径,也有从vj到vi的路径,则称该有向图是强连通图。有向图的极大强连通子图称为强连通分量。图a中有两个强连通分量,分别是{v1,v3,v4}和{v2},如图b所示。

图的存储结构 最常用的存储表示形式: 邻接矩阵 邻接表

邻接矩阵表示法 存贮方式: 一个存储所有顶点信息的表(一维数组) 一个表示顶点之间边(弧)的邻接矩阵(二维数组)

邻接矩阵 V1 V2 V3 V4 V1 0 0 1 0 V2 0 0 0 1 V3 0 0 0 1 V4 1 0 0 0 V1 V3 V2 V4 有向图 V1 V2 V3 V4 V1 0 1 1 1 V2 1 0 0 1 V3 1 0 0 0 V4 1 1 0 0 V1 V3 V2 V4 无向图

邻接矩阵表示法的特点 无向图(网)的关系矩阵一定是对称矩阵。 无向图(网)的关系矩阵的第i行(或第i列)非零元素个数为第i个顶点的度D(vi)。 有向图的关系矩阵的第i行非零元素个数为第i个顶点的出度OD(vi),第i列非零元素个数就是第i个顶点的入度ID(vi)。 比较容易确定图中任意两个顶点之间是否有边相连。 无向图的邻接矩阵一定是对称的,而有向图的邻接矩阵不一定对称。因此,用邻接矩阵来表示一个具有n个顶点的有向图时需要n^2个单元来存储邻接矩阵;对有n个顶点的无向图则只存入上(下)三角阵中剔除了左上右下对角线上的0元素后剩余的元素,故只需1+2+...+(n-1)=n(n-1)/2个单元。对稀疏图浪费空间。 0 1 0 1 1 0 1 1 0 1 0 0 1 1 0 0 A= V0 V2 V1 V3 19/26

图的邻接矩阵存储表示 #define MaxVertexNum 100 /*最大顶点数设为100*/ typedef char VertexType; /*顶点类型设为字符型*/ typedef int EdgeType; typedef struct { VertexType vexs[MaxVertexNum]; EdeType edges[MaxVertexNum][MaxVertexNum]; int n,e; }Mgragh;

// 建立一个图的邻接矩阵存储的算法如下: void CreateMGraph(MGraph *G) {/*建立有向图G的邻接矩阵存储*/ int i,j,k,w; scanf("%d,%d",&(G->n),&(G->e));/*输入顶点数和边数*/ for (i=0;i<G->n;i++) scanf("%c",&(G->vexs[i])); for (i=0;i<G->n;i++) for (j=0;j<G->n;j++) G->edges[i][j]=0; for (k=0;k<G->e;k++) { scanf("%d%d",&i,&j); /*输入e条边,建立邻接矩阵*/ G->edges[i][j]=1; /*若加入G->edges[j][i]=1;,*/ } }/*CreateMGraph*/

邻接矩阵表示法 有向网 A B C D A ∞ 3 ∞ 2 B ∞ ∞ 5 4 C ∞ ∞ ∞ 6 D 1 ∞ ∞ ∞ B A C D 6

邻接矩阵表示法 练习:给出下列网的邻接矩阵表示法 1 2 3 4 ∞ 9 6 3 ∞ 9 ∞ 4 5 ∞ A= 6 4 ∞ ∞ 7 3 4 ∞ 9 6 3 ∞ 9 ∞ 4 5 ∞ A= 6 4 ∞ ∞ 7 3 5 ∞ ∞ 8 ∞ ∞ 7 8 ∞ 9 6 4 3 5 7 8

邻接表 存贮方式 把从一个顶点出发的边链接在一个单链表(又称边链表)中 所有边链表的表头指针放在一个顺序表(又名顶点表)中 边链表结点: nextarc info adjvex 或 顶点表结点: firstarc vexdata

邻接表 V1 V2 V3 V4 V1 V3 V2 V4 有向图 V1 V2 V3 V4 V1 V3 V2 V4 无向图  3  4 

邻接表的特点 在边稀疏的情况下,节省存储空间 判定任意两个顶点之间是否有边或弧不方便 不便于计算有向图各个顶点的度

邻接表存储表示 #define MaxVerNum 100 /*最大顶点数为100*/ typedef char VertexType ; typedef struct node { /*边表结点*/ int adjvex; struct node * next; /*若要表示边上信息,则应增加一个数据域info*/ }EdgeNode; typedef struct vnode { /*顶点表结点*/ VertexType vertex; EdgeNode * firstedge; }VertexNode; typedef struct{ VertexNode AdjList[MaxVertexNum]; int n,e; }ALGraph;

// 建立一个有向图的邻接表存储的算法如下: void CreateALGraph(ALGraph. G) {/. 建立有向图的邻接表存储 // 建立一个有向图的邻接表存储的算法如下: void CreateALGraph(ALGraph *G) {/*建立有向图的邻接表存储*/ int i,j,k; EdgeNode * s; scanf("%d,%d",&(G->n),&(G->e)); /*读入顶点数和边数*/ for (i=0;i<G->n;i++) { scanf(“\n%c",&(G->AdjList[i].vertex)); G->adjlist[i].firstedge=NULL; } for (k=0;k<G->e;k++) /*建立边表*/ scanf("\n%d,%d",&i,&j); s=(EdgeNode*)malloc(sizeof(EdgeNode)); s->adjvex=j; /*邻接点序号为j*/ s->next=G->AdjList [i].firstedge; /*将新边表结点s插入到顶点Vi的边表头部*/ G->adjlist[i].firstedge=s; }/*CreateALGraph*/

邻接表 B A C D 6 3 2 1 5 4 有向网 A B C D 2 3 4 2  3 5 4  4 6  1 

逆邻接表 V1 V2 V3 V4 V1 V3 V2 V4 有向图 V1 V2 V3 V4  3  4  1   4  1  2

小结 本讲主要介绍了图的定义和基本术语,以及图的两种不同的存储结构:邻接矩阵和邻接表。重点介绍了邻接矩阵和邻接表的存储结构以及如何建立相应存储结构的图。 31/26

作业与实验 作业 1.在有向图的邻接矩阵中如何求某个顶点的入度和出度? 在无向图的邻接表中如何求某个顶点的度数? 2.设计将图的邻接矩阵转为图的邻接表的算法。 32/26