数据结构严蔚敏7章图ppt课件.ppt
《数据结构严蔚敏7章图ppt课件.ppt》由会员分享,可在线阅读,更多相关《数据结构严蔚敏7章图ppt课件.ppt(74页珍藏版)》请在三一办公上搜索。
1、7.1 图的定义和术语,第7章 图和广义表,7.2 图的存储结构,7.3 图的遍历,7.4 连通图的最小生成树,7.5 单源最短路径,7.6 拓朴排序,7.7 关键路径,*7.8 广义表,图(graph)是由一个顶点(vertex)的有穷非空集V(G)和一个弧或边(arc)的集合E(G)组成。记作G=V,E.图又分为有向图和无向图,图中的顶点即为数据元素。对有向图 没有箭头的出发端称为弧尾(tail)或始点(initial)。带箭头的终止端称为弧头(head)或终点(terminal node)用有序对表示从v到w的一条弧。(如图中)对无向图,7.1 图的定义和术语,1 图的定义,(a)有向图
2、G1,7.1 图的定义和术语,1 图的定义,(b)无向图G2,图(graph)是由一个顶点(vertex)的有穷非空集V(G)和一个弧或边(arc)的集合E(G)组成。记作G=V,E.图又分为有向图和无向图,图中的顶点即为数据元素。对有向图 没有箭头的出发端称为弧尾(tail)或始点(initial)。带箭头的终止端称为弧头(head)或终点(terminal node)用有序对表示从v到w的一条弧。(如图中)对无向图,用(v,w)表示一条边。,如(A,B)表示无向图G2中的一条边。,图的表示 G1=(V1,E1)V1=A,C,B,F,D,E,G E1=,G2=(V2,E2)V2=A,B,C,
3、D,E,F E2=(A,B),(A,C),(B,C),(B,E),(B,F),(C,F),(C,D),(E,F),(C,F),假设有两个图G=(V,E)和G=(V,E),如果V V且E E,则称G是G的子图。,可以证明,对于具有n个顶点的无向图的边和具有n个顶点的有向图的弧的最大数目分别为n(n-1)/2和n(n-1)。称具有n(n-1)/2条边的无向图为完全图(completed grahp)。称具有n(n-1)条弧的有向图为完全有向图 称边或弧的数目enlogn的图为稀疏图(sparse graph),反之则称为稠密图(dense graph)。子图,2 几个常用术语,可以证明,对于具有n
4、个顶点的无向图的边和具有n个顶点的有向图的弧的最大数目分别为n(n-1)/2和n(n-1)。称具有n(n-1)/2条边的无向图为完全图(completed grahp)。称具有n(n-1)条弧的有向图为完全有向图 称边或弧的数目enlogn的图为稀疏图(sparse graph),反之则称为稠密图(dense graph)。子图,2 几个常用术语,假设有两个图G=(V,E)和G=(V,E),如果V V且E E,则称G是G的子图。,度、入度和出度 若uv是有向图中的一条弧,则称u邻接到v,或称v被邻接到u。图中所邻接到顶点v的弧(即以它为弧头的弧)的数目,称为顶点v的入度(indegree),记
5、作ID(v);反之,从某顶点u出发的弧(即邻接自该顶点的弧),称为该顶点的出度(outdegree),记作OD(u)。有向图中顶点v的入度和出度之和称为该顶点的总度,简称为度(degree),记作TD(v),如右所示的有向图 顶点C邻接到顶点E,vcvE,ID(vc)=,2,OD(vc)=,1,TD(vc)=,3,无向图中顶点的度定义为与该顶点相连的边的数目。如果顶点vi的度记为TD(vi),则一个含n个顶点,e条边或弧的图,满足如下关系,TD(vB)=,4,度、入度和出度 若uv是有向图中的一条弧,则称u邻接到v,或称v被邻接到u。图中所邻接到顶点v的弧(即以它为弧头的弧)的数目,称为顶点v
6、的入度(indegree),记作ID(v);反之,从某顶点u出发的弧(即邻接自该顶点的弧),称为该顶点的出度(outdegree),记作OD(u)。有向图中顶点v的入度和出度之和称为该顶点的总度,简称为度(degree),记作TD(v),路径和回路,若有向图G中k+1个顶点之间都有弧存在(即,是图G中的弧),则这个顶点的序列(v0,v1,.,vk)为从顶点v0到顶点vk的一条有向路径,路径中弧的数目定义为路径长度。若序列中的顶点都不相同,则称为简单路径。,(v0,v1,v2,v4,v1,v5,v6)是v0到v6的一条有向路径,(v0,v1,v5,v6)也是v0到v6的一条有向路径,简单路径,路
7、径和回路,若有向图G中k+1个顶点之间都有弧存在(即,是图G中的弧),则这个顶点的序列(v0,v1,.,vk)为从顶点v0到顶点vk的一条有向路径,路径中弧的数目定义为路径长度。若序列中的顶点都不相同,则称为简单路径。对于无向图,相邻顶点之间存在边的k+1个顶点序列构成一条长度为k的无向路径。,(v0,v1,v2,v4,v5,v2,v3)是v0到v3的一条无向路径,(v0,v1,v2,v3)也是v0到v3的一条有向路径,如果v0和vk是同一个顶点,则是一条由某个顶点出发又回到该顶点的路径,称这种路径为回路或环(cycle).,简单路径,(v0,v1,v5,v2,v0)是一条回路或环路,连通图和
8、连通分量,若无向图中任意两个顶点之间都存在一条无向路径,则称该无向图为连通图。若有向图中任意两个顶点之间都存在一条有向路径,则称该有向图为强连通图。非(强)连通图中各个(强)连通子图称为该图的(强)连通分量.,连通图,非连通图,强连通图,非强连通图,2个连通分量,4个强连通分量,带权图和网,边(弧)上带有权值的图称为网。带权有向图和带权无向图分别称为有向网和无向网。,1,0,2,3,4,3,8,6,5,9,有向网,图的基本操作,CreateGraph(&G,V,VR).BFSTraverse(G,v,visit(),7.2 图的存储结构,1.图的数组(邻接矩阵)存储表示 2.图的邻接表存储表示
9、,7.2 图的存储结构,7.2.1 图的数组(邻接矩阵)存储表示,无权图的邻接矩阵的定义,设G=(V,E)是具有n(n0)个顶点的图,顶点的顺序依次为(v0,v1,vn-1),则G的邻接矩阵A是n阶方阵,A00 A01 A0n-1A10 A11 A1n-1 An-10 An-11 An-1n-1,A=,Aij=,1,若vi和vj之间有弧或边存在,0,反之,7.2 图的存储结构,7.2.1 图的数组(邻接矩阵)存储表示,网的邻接矩阵的定义,设G=(V,E)是具有n(n0)个顶点的带权图,顶点的顺序依次为(v0,v1,vn-1),wij则是顶点i和j的弧(边)上的权值,则G的邻接矩阵A是n阶方阵,
10、A00 A01 A0n-1A10 A11 A1n-1 An-10 An-11 An-1n-1,A=,Aij=,wij,若vi和vj之间有弧或边存在,反之,G1,(1)有向图的邻接矩阵,a.有向图的邻接矩阵一般是个稀疏矩阵,b.第i行非零元素的个数是顶点vi的,的出度。,c.第j列非零元素的个数是顶点vj的,的入度。,有向图邻接矩阵的几个特点,(2)无向图的邻接矩阵,a.无向图的邻接矩阵是个对称矩阵;b.第i行非零元素的个数是顶点vi的度。,G2,无向图邻接矩阵的几个特点,(3)有向网的邻接矩阵,1,0,2,3,4,3,8,6,5,9,有向网,一个图的邻接矩阵是唯一的,邻接矩阵的类型定义cons
11、t INT_MAX=32767;const MAX_V=20;typedef int VRType;typedef int InforType;typedef int VertexType;typedef enum DG,DN,AG,AN GraphKind;typedef struct VRType adj;InforType*info;ArcCell,AdjMatrixMAX_VMAX_V;typedef struct VertexType vexMAX_V;AdjMatrix arcs;int vexnum,arcnum;GraphKind kind;MGraph;,/设置“无穷大”值,
12、/最大顶点数目,/图的种类,/邻接矩阵类型,/顶点关系类型,/指向边或弧信息(如权值)的指针,/顶点信息数组(如顶点编号等),/图的邻接矩阵,/图的顶点数和边(弧)的数目,/图的种类标志,7.2.2 图的邻接表存储表示,邻接表是一种链式存储表示方法,它类似于树的孩子链表。在邻接表中,对图中每个顶点建立一个单链表,第i个顶点的单链表的所有结点,表示依附于顶点vi的边(或以vi为尾的弧)。每个单链表上附设一个表头结点。表结点和表头结点的结构如下:,(1)表结点的三个域 adjvex 是个整形变量,指示与顶点vi邻接的顶点在表头数组中的存储位置(下标);nextarc 是指针型变量,指向下一条边或弧
13、的结点;Info存储与边或弧相关的信息,如权值等;(2)表头结点的两个域 data 存储顶点vi的名称或编号等信息;firstarc指向链表中第一个结点。,表结点,表头结点,表结点,表头结点,typedef struct ArcNode int adjvex;struct ArcNode*nextarc;InfoType*info;ArcNode;,typedef struct VertexType data;ArcNode*firstarc;VNode,AdjListMAX_V;,typedef struct/图的邻接表类型 AdjList vertices;/存储图中所有顶点的数组 int
14、 vexnum,arcnum;/存储图的顶点数目和边(弧)的数目 int kind;/图的种类标志 ALGraph;,typedef struct ArcNode int adjvex;struct ArcNode*nextarc;InfoType*info;ArcNode;,typedef struct VertexType data;ArcNode*firstarc;VNode,AdjListMAX_V;,typedef struct AdjList vertices;int vexnum,arcnum;int kind;ALGraph;,ALGraph G;,0,1,MAX_V-1,.,
15、.,.,G.vertices,G.vexnum,G.arcnum,G.kind,data,firstarc,有向图的邻接表存储示意图,1,2,4,5,有向图G1的邻接表,注意:图的邻接表不是唯一的,因为与一个顶点相邻的边的顺序没有明确规定。在此规定:边的顺序号按相关顶点的顺序号由小到大排定。,有向图G的逆邻接表,表结点指针域链接的不是出边而是入边.,有向网G3,有向网的邻接表,1,2,0,3,4,有向网G3的邻接表,算法7.1 建立无向图的邻接表存储结构,void CreateUDG(ALGraph,/输入边的起、止顶点名称值,/确定v1,v2下标,/输入顶点名称值,/用头插法插入v1的相邻结
16、点,/用头插法插入v2的相邻结点,typedef struct ArcNode int adjvex;struct ArcNode*nextarc;InfoType*info;ArcNode,*ArcNodeP;,typedef struct VertexType data;ArcNode*firstarc;VNode,AdjListMAX_V;,typedef struct AdjList vertices;int vexnum,arcnum;int kind;ALGraph;,/算法 7.1的改进算法(用尾插法建立无向图的邻接表)void CreateUDG(ALGraph/for/Cre
17、ateUDG,/算法 7.1的改进算法(用尾插法建立无向图的邻接表)void CreateUDG(ALGraph.,/算法 7.1的改进算法(用尾插法建立无向图的邻接表)void CreateUDG(ALGraph.,/算法 7.1的改进算法(用尾插法建立无向图的邻接表)void CreateUDG(ALGraph/for/CreateUDG,/补充算法 7.1-1 确定顶点名称值为v的存储下标int LocateVex(ALGraph G,VertexType v)int i;for(i=0;i=G.vexnum)ErrorMessage(顶点名称值有错!);return i;,/补充算法
18、7.1-2 输出图的邻接表void DisplayGraph(ALGraph G)int i;ArcNode*p;coutadjvex;p=p-nextarc;coutendl;,/主函数调用实例.ALGraph G;CreateUDG(G);DisplayGraph(G);,无向图G3,以右上图为例图中9个顶点名称值的输入顺序为1,2,3,4,5,6,7,8,9图中11条边的输入顺序为1-2,1-3,1-4,2-3,2-4,3-6,4-9,5-6,5-7,5-8,7-9,/运行结果(省略了输入提示信息)当前图的邻接表为:0:1-1-2-31:2-0-2-32:3-0-1-53:4-0-1-8
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 严蔚敏 章图 ppt 课件

链接地址:https://www.31ppt.com/p-5355775.html