数据结构 第7章 图.ppt
《数据结构 第7章 图.ppt》由会员分享,可在线阅读,更多相关《数据结构 第7章 图.ppt(98页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、n n图的定义和术语图的定义和术语n n图的存储结构图的存储结构n n图的遍历与连通性图的遍历与连通性 n n最小生成树最小生成树n n活动网络活动网络n n最短路径最短路径 7.1 图的定义和术语图的定义和术语n n图形结构的形式定义图形结构的形式定义图形结构的形式定义图形结构的形式定义 图是由顶点集合图是由顶点集合图是由顶点集合图是由顶点集合(vertex)及顶及顶及顶及顶点间的关系集合组成的一种数据结构点间的关系集合组成的一种数据结构点间的关系集合组成的一种数据结构点间的关系集合组成的一种数据结构:GraphGraph(V V,R R)其中:其中:其中:其中:V V=x x|x x 某个
2、数据对象某个数据对象某个数据对象某个数据对象 ,是顶点的有穷非空集合;是顶点的有穷非空集合;是顶点的有穷非空集合;是顶点的有穷非空集合;RR边的边的边的边的有限集合有限集合有限集合有限集合R R=(=(x x,y y)|)|x x,y y V V 无向图无向图无向图无向图 或或或或R R=y|x x,y y V V&PathPath(x x,y y)有向图有向图有向图有向图 是顶点之间关系的有穷集合,也叫做边是顶点之间关系的有穷集合,也叫做边是顶点之间关系的有穷集合,也叫做边是顶点之间关系的有穷集合,也叫做边(edge)edge)集合。集合。集合。集合。PathPath(x x,y y)表示从
3、表示从表示从表示从 x x 到到到到 y y 的一条单向通路的一条单向通路的一条单向通路的一条单向通路,它是有方向它是有方向它是有方向它是有方向的。的。的。的。x x弧尾,弧尾,弧尾,弧尾,y y弧头弧头弧头弧头 n n有向图与无向图有向图与无向图有向图与无向图有向图与无向图 1.1.有向图中:边用有向图中:边用有向图中:边用有向图中:边用 x,y表示,且表示,且表示,且表示,且x x与与与与y y是有序的。是有序的。是有序的。是有序的。a.a.有向图中的边称为有向图中的边称为有向图中的边称为有向图中的边称为“弧弧弧弧”b.xb.x弧尾或弧尾或弧尾或弧尾或初始点初始点初始点初始点 yy弧头或终
4、端点弧头或终端点弧头或终端点弧头或终端点vv无向图:边用无向图:边用无向图:边用无向图:边用(x,y)x,y)表示,且顶表示,且顶表示,且顶表示,且顶x x与与与与 y y是无序的。是无序的。是无序的。是无序的。n n完全图完全图完全图完全图vv 在具有在具有在具有在具有n n 个顶点的有向图中,最大弧数为个顶点的有向图中,最大弧数为个顶点的有向图中,最大弧数为个顶点的有向图中,最大弧数为 n n(n n-1)-1)vv 在具有在具有在具有在具有n n 个顶点的无向图中,最大边数为个顶点的无向图中,最大边数为个顶点的无向图中,最大边数为个顶点的无向图中,最大边数为 n n(n n-1)/2-1
5、)/2n n顶点的度顶点的度顶点的度顶点的度vv无向图:与该顶点相关的边的数目无向图:与该顶点相关的边的数目无向图:与该顶点相关的边的数目无向图:与该顶点相关的边的数目vv有向图有向图有向图有向图:入度入度入度入度ID(ID(v v):以该顶点为头的弧的数目以该顶点为头的弧的数目以该顶点为头的弧的数目以该顶点为头的弧的数目 出度出度出度出度OD(OD(v v):以该顶点为尾头的弧的数目以该顶点为尾头的弧的数目以该顶点为尾头的弧的数目以该顶点为尾头的弧的数目 在在有有向向图图中中,顶顶点点的的度度等等于于该该顶顶点点的的入入度度与与出出度之和。度之和。n n邻接点邻接点vv 无无无无向图:两顶点
6、之间有条边,则两顶点互为邻接点向图:两顶点之间有条边,则两顶点互为邻接点向图:两顶点之间有条边,则两顶点互为邻接点向图:两顶点之间有条边,则两顶点互为邻接点 x y (x,y)x y (x,y)vv 有向图有向图有向图有向图:从:从x到到y有有一条弧,则一条弧,则y是是x的的邻接点,邻接点,但但x不是不是y的邻接点的邻接点 x y n n权权 某某些些图图的的边边具具有有与与它它相相关关的的数数,称称之之为为权权。这种带权图叫做网络。这种带权图叫做网络。n n子子图图 设设有有两两个个图图 G(V,E)和和 G(V,E)。若若 V V 且且 E E,则称则称 图图G 是是 图图G 的子图。的子
7、图。n n路径路径路径路径 在图在图在图在图 GG(V V,E E)中中中中,若从顶点若从顶点若从顶点若从顶点 v vi i 出发出发出发出发,沿一些边沿一些边沿一些边沿一些边经过一些顶点经过一些顶点经过一些顶点经过一些顶点 v vp p1 1,v vp p2 2,v vpmpm,到达顶点到达顶点到达顶点到达顶点v vj j。则称顶点则称顶点则称顶点则称顶点序列序列序列序列 (v vi i v vp p1 1 v vp p2 2.v vpm pm v vj j )为从顶点为从顶点为从顶点为从顶点v vi i 到顶点到顶点到顶点到顶点 v vj j 的路径的路径的路径的路径。它经过的边它经过的边
8、它经过的边它经过的边(v vi i,v vp p1 1)、(v vp p1 1,v vp p2 2)、.、(v vpmpm,v vj j)应是属应是属应是属应是属于于于于E E的边。的边。的边。的边。n n路径长度路径长度路径长度路径长度 uu非带权图的路径长度是指此路径上边非带权图的路径长度是指此路径上边非带权图的路径长度是指此路径上边非带权图的路径长度是指此路径上边/弧的条数。弧的条数。弧的条数。弧的条数。uu带权图的路径长度是指路径上各边带权图的路径长度是指路径上各边带权图的路径长度是指路径上各边带权图的路径长度是指路径上各边/弧的权之和。弧的权之和。弧的权之和。弧的权之和。n n简单路
9、径简单路径 若路径上各顶点若路径上各顶点 v1,v2,.,vm 均不互均不互相重复相重复,则称这样的路径为简单路径。则称这样的路径为简单路径。n n回路回路 若路径上第一个顶点若路径上第一个顶点 v1 与最后一个顶点与最后一个顶点vm 重合重合,则称这样的路径为回路或环。则称这样的路径为回路或环。n n连通图与连通分量连通图与连通分量 在无向图中在无向图中,若从顶点若从顶点v1到到顶点顶点v2有路径有路径,则称顶点则称顶点v1与与v2是连通的。如果是连通的。如果图中任意一对顶点都是连通的图中任意一对顶点都是连通的,则称此图是连通则称此图是连通图。非连通图的极大连通子图叫做连通分量。图。非连通图
10、的极大连通子图叫做连通分量。n n强连通图与强连通分量强连通图与强连通分量强连通图与强连通分量强连通图与强连通分量 在有向图中在有向图中在有向图中在有向图中,若对于每一对顶若对于每一对顶若对于每一对顶若对于每一对顶点点点点v vi i和和和和v vj j,都存在一条从都存在一条从都存在一条从都存在一条从v vi i到到到到v vj j和从和从和从和从v vj j到到到到v vi i的路径的路径的路径的路径,则称此则称此则称此则称此图是强连通图。非强连通图的极大强连通子图叫做强图是强连通图。非强连通图的极大强连通子图叫做强图是强连通图。非强连通图的极大强连通子图叫做强图是强连通图。非强连通图的极
11、大强连通子图叫做强连通分量。连通分量。连通分量。连通分量。n n生成树生成树生成树生成树 一个连通图的生成树是它的极小连通子图,在一个连通图的生成树是它的极小连通子图,在一个连通图的生成树是它的极小连通子图,在一个连通图的生成树是它的极小连通子图,在n n个顶点的情形下,有个顶点的情形下,有个顶点的情形下,有个顶点的情形下,有n n-1-1条边。条边。条边。条边。vv 生成树是对指连通图来而言的生成树是对指连通图来而言的生成树是对指连通图来而言的生成树是对指连通图来而言的vv 是连同图的极小连同子图是连同图的极小连同子图是连同图的极小连同子图是连同图的极小连同子图vv 包含图中的所有顶点包含图
12、中的所有顶点包含图中的所有顶点包含图中的所有顶点vv 有且仅有有且仅有有且仅有有且仅有n-1n-1条边条边条边条边n n本章不予本章不予本章不予本章不予 讨论的图讨论的图讨论的图讨论的图7.2 图的存储表示图的存储表示n n顶点表顶点表:一个一个记录各个顶点信息记录各个顶点信息的一维数组,的一维数组,n n邻接矩阵:邻接矩阵:一个一个表示各个顶点之间的关系(边表示各个顶点之间的关系(边或弧)或弧)的二维数组。的二维数组。n n设图设图 G=(V,E)是一个有是一个有 n 个顶点的图,则图的个顶点的图,则图的邻接矩阵邻接矩阵G.arcsnn 定义为:定义为:n nG.arcsij=1 若若 或或
13、(Vi,Vj)EEn n 0 反之反之1.邻接矩阵邻接矩阵(Adjacency Matrix)表示法表示法(数组表示法)(数组表示法)1)类型定义)类型定义#define MAX_VERTEX_NUM 20/最大顶点数最大顶点数typedef int AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;/邻接矩阵类型邻接矩阵类型typedef struct VertexType vexsMAX_VERTEX_NUM;/顶点表顶点表AdjMatrix arcs;/邻接矩阵邻接矩阵int vexnum,arcnum;/图的顶点数和弧数图的顶点数和弧数 MGraph;n n无
14、向图的邻接矩阵是以主对角线对称的,有向无向图的邻接矩阵是以主对角线对称的,有向图的邻接矩阵可能是不对称的。图的邻接矩阵可能是不对称的。n n在有向图中:在有向图中:第第 i 行行 1 的个数就是顶点的个数就是顶点 i 的出度,的出度,第第 j 列列 1 的个数就是顶点的个数就是顶点 j 的入度。的入度。n n在无向图中在无向图中,第第 i 行行(列列)1 的个数就是顶点的个数就是顶点i 的的度。度。网的邻接矩阵网的邻接矩阵G.arcsij=Wi,j若若 或或(Vi,Vj)E 反之反之int LocateVex(MGraph G,char u)int i;for(i=0;iG.vexnum;i+
15、)if(u=G.vexsi)return i;if(i=G.vexnum)printf(Error u!n);exit(1);return 0;2)建立邻接矩阵算法7.1,7.2,p162163void CreateMGraph(MGraph&G)int i,j,k,w;char v1,v2;printf(Input vexnum&arcnum:);scanf(%d,%d,&G.vexnum,&G.arcnum);printf(Input Vertices:);scanf(%s,G.vexs);/for(i=0;iG.vexnum;i+)/scanf(%c,&G.vexsi);for(i=0;
16、iG.vexnum;i+)for(j=0;jG.vexnum;j+)G.arcsij=0;for(k=0;kG.arcnum;k+)printf(Input Arcs(v1,v2&w):n);scanf(%c%c,%d,&v1,&v2,&w);i=LocateVex(G,v1);j=LocateVex(G,v2);G.arcsij=w;/G.arcsji=w;return;void PrintMGraph(MGraph G)int i,j;printf(Output Vertices:);printf(%s,G.vexs);printf(n);printf(Output AdjMatrix:n
17、);for(i=0;iG.vexnum;i+)for(j=0;jG.vexnum;j+)printf(%4d,G.arcsij);printf(n);return;邻接表邻接表(Adjacency List)一种链式存储结构一种链式存储结构n 把同一个顶点发出的边链接在同一个边链表把同一个顶点发出的边链接在同一个边链表中,链表的每一个结点代表一条边,叫做表结中,链表的每一个结点代表一条边,叫做表结点(边结点),邻接点域点(边结点),邻接点域adjvex保存与该边相保存与该边相关联的另一顶点的顶点下标关联的另一顶点的顶点下标,链域链域nextarc存存放指向同一链表中下一个表结点的指针放指向同一
18、链表中下一个表结点的指针,数,数据域据域info存放边的权。边链表的表头指针存放存放边的权。边链表的表头指针存放在头结点中。在头结点中。头结点以顺序结构存储,其数据头结点以顺序结构存储,其数据域域data存放顶点信息,链域存放顶点信息,链域firstarc指向链表指向链表中第一个顶点。中第一个顶点。表结点表结点头结点头结点adjvex nextarc infodatafirstarc存储表示存储表示typedeftypedef structstruct ArcNodeArcNode intint adjvexadjvex;structstruct ArcNodeArcNode*nextarcn
19、extarc;intint info;info;ArcNodeArcNode;/;/边结点类型边结点类型边结点类型边结点类型typedeftypedef structstruct VNodeVNode VertexTypeVertexType data;data;ArcNodeArcNode*firstarcfirstarc;VNodeVNode,AdjListAdjListMAX_VERTEX_NUM;MAX_VERTEX_NUM;typedeftypedef structstruct AdjListAdjList vertices;/vertices;/邻接表邻接表邻接表邻接表intint
20、 vexnumvexnum,arcnumarcnum;ALGraphALGraph;n n有向图的邻接表和逆邻接表有向图的邻接表和逆邻接表n n在有向图的邻接表中,第在有向图的邻接表中,第 i 个链表中结点的个个链表中结点的个数是数是顶点顶点Vi的出度的出度。n n在有向图的逆邻接表中,第在有向图的逆邻接表中,第 i 个链表中结点的个链表中结点的个数是个数是顶点顶点Vi 的入度的入度。n n带权图的边结点中带权图的边结点中info保存该边上的权值保存该边上的权值。n n顶点顶点 Vi 的边链表的头结点存放在下标为的边链表的头结点存放在下标为 i 的顶的顶点数组中。点数组中。n n在邻接表的边链
21、表中,在邻接表的边链表中,各个边结点的链入顺序各个边结点的链入顺序任意,视边结点输入次序而定。任意,视边结点输入次序而定。n n设图中有设图中有 n 个顶点,个顶点,e 条边,则条边,则用邻接表表示用邻接表表示无向图时无向图时,需要,需要 n 个顶点结点,个顶点结点,2e 个边结点;个边结点;用用邻接表表示有向图时邻接表表示有向图时,若不考虑逆邻接表,若不考虑逆邻接表,只需只需 n 个顶点结点,个顶点结点,e 个边结点。个边结点。n n建立邻接表的时间复杂度为建立邻接表的时间复杂度为O(n*e)。若顶点信若顶点信息即为顶点的下标,则时间复杂度为息即为顶点的下标,则时间复杂度为O(n+e)。网络
22、网络(带权图带权图)的邻接表的邻接表int LocateVex(ALGraph G,char u)int i;for(i=0;iG.vexnum;i+)if(u=G.verticesi.data)return i;if(i=G.vexnum)printf(Error u!n);exit(1);return 0;void CreateALGraph_adjlist(ALGraph&G)int i,j,k,w;char v1,v2;ArcNode*p;printf(Input vexnum&arcnum:);scanf(%d,%d,&G.vexnum,&G.arcnum);printf(Input
23、 Vertices:);for(i=0;iG.vexnum;i+)scanf(%c,&G.verticesi.data);G.verticesi.firstarc=NULL;printf(Input Arcs(v1,v2&w):n);for(k=0;kadjvex=j;p-info=w;p-nextarc=G.verticesi.firstarc;G.verticesi.firstarc=p;return;十字链表十字链表(Orthogonal List)有向图的另一种链式存储结构有向图的另一种链式存储结构n n可看作是将有向图的邻接表和逆邻接表结合可看作是将有向图的邻接表和逆邻接表结合的一种
24、链表的一种链表headvextailvexhlinktlinkinfo弧结点弧结点firstindatafirstout顶点结点顶点结点tailvex弧尾,headvex弧头,hlink指向弧头相同的下一条弧,tlink指向弧尾相同的下一条弧data顶点信息,firstin以该顶点为头的第一个弧结点,firstout以该结点为尾的第一个弧结点typedeftypedef structstruct ArcBoxArcBox intint headvexheadvex,tailvextailvex;structstruct ArcBoxArcBox*hlinkhlink,*,*tlinktlink
25、;intint info;info;ArcBoxArcBox;typedeftypedef structstruct VexNodeVexNode VertexTypeVertexType data;data;ArcBoxArcBox*firstinfirstin,*,*firstoutfirstout;VexNodeVexNode;typedeftypedef structstruct VexNode xlistVexNode xlistMAX_VERTEX_NUM;MAX_VERTEX_NUM;intint vexnumvexnum,arcnumarcnum;OLGraphOLGraph;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第7章
限制150内