图资料学习教程.pptx
《图资料学习教程.pptx》由会员分享,可在线阅读,更多相关《图资料学习教程.pptx(117页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、图的存储结构图的存储结构图的存储结构图的存储结构-邻接矩阵邻接矩阵邻接矩阵邻接矩阵(数组表示法)(数组表示法)(数组表示法)(数组表示法)基基本本思思想想:用用一一个个一一维维数数组组存存储储图图中中顶顶点点的的信信息息,用用一一个个二二维维数数组组(称称为为邻邻接接矩矩阵阵)存存储储图图中中各各顶顶点点之之间间的的邻邻接接关关系系。用用两两个个整整型型变变量量分分别别存存储储顶顶点点数数和边数和边数。6.2 6.2 图的存储结构及实现图的存储结构及实现图的存储结构及实现图的存储结构及实现假假设设图图G G(V(V,E)E)有有n n个个顶顶点点,则则邻邻接接矩矩阵阵是是一一个个nnnn的方阵
2、,定义为:的方阵,定义为:arcsij1 若若(vi,vj)E(或(或E)0 其它其它第1页/共117页无向图的邻接矩阵的特点?无向图的邻接矩阵的特点?无向图的邻接矩阵无向图的邻接矩阵6.2 6.2 图的存储结构及实现图的存储结构及实现图的存储结构及实现图的存储结构及实现V1V3V4V2V1 V2 V3 V4vertex=0 1 0 1 1 0 1 1 0 1 0 0 1 1 0 0 arcs=V1 V2 V3 V4V1V2V3V4主对角线为主对角线为 0 且一定是对称矩阵。且一定是对称矩阵。第2页/共117页如何求顶点如何求顶点i的度?的度?无向图的邻接矩阵无向图的邻接矩阵6.2 6.2 图
3、的存储结构及实现图的存储结构及实现图的存储结构及实现图的存储结构及实现V1V3V4V2V1 V2 V3 V4vertex=0 1 0 1 1 0 1 1 0 1 0 0 1 1 0 0 arcs=V1 V2 V3 V4V1V2V3V4邻接矩阵的第邻接矩阵的第i行(或第行(或第i列)非零元素的个数。列)非零元素的个数。第3页/共117页如何判断顶点如何判断顶点 i 和和 j 之间是否存在边?之间是否存在边?无向图的邻接矩阵无向图的邻接矩阵6.2 6.2 图的存储结构及实现图的存储结构及实现图的存储结构及实现图的存储结构及实现V1V3V4V2V1 V2 V3 V4vertex=0 1 0 1 1
4、0 1 1 0 1 0 0 1 1 0 0 arcs=V1 V2 V3 V4V1V2V3V4测试邻接矩阵中相应位置的元素测试邻接矩阵中相应位置的元素arcsij是否为是否为1第4页/共117页如何求顶点如何求顶点 i 的所有邻接点?的所有邻接点?无向图的邻接矩阵无向图的邻接矩阵6.2 6.2 图的存储结构及实现图的存储结构及实现图的存储结构及实现图的存储结构及实现V1V3V4V2V1 V2 V3 V4vertex=0 1 0 1 1 0 1 1 0 1 0 0 1 1 0 0 arcs=V1 V2 V3 V4V1V2V3V4将数组中第将数组中第 i 行元素扫描一遍,若行元素扫描一遍,若arcs
5、ij为为1,则,则顶点顶点 j 为顶点为顶点 i 的邻接点。的邻接点。第5页/共117页6.2 6.2 图的存储结构及实现图的存储结构及实现图的存储结构及实现图的存储结构及实现有向图的邻接矩阵有向图的邻接矩阵V1V2V3V4V1 V2 V3 V4vertex=0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 arcs=V1 V2 V3 V4V1V2V3V4有向图的邻接矩阵一定不对称吗?有向图的邻接矩阵一定不对称吗?不一定,例如有向完全图。不一定,例如有向完全图。第6页/共117页6.2 6.2 图的存储结构及实现图的存储结构及实现图的存储结构及实现图的存储结构及实现有向图的邻接矩
6、阵有向图的邻接矩阵V1V2V3V4V1 V2 V3 V4vertex=0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 arcs=V1 V2 V3 V4V1V2V3V4如何求顶点如何求顶点 i 的的出度(出度(i是弧尾)是弧尾)?邻接矩阵的第邻接矩阵的第 i 行元素之和。行元素之和。第7页/共117页6.2 6.2 图的存储结构及实现图的存储结构及实现图的存储结构及实现图的存储结构及实现有向图的邻接矩阵有向图的邻接矩阵V1V2V3V4V1 V2 V3 V4vertex=0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 arcs=V1 V2 V3 V4V1V2V3V4
7、如何求顶点如何求顶点 i 的的入度入度?(i是弧头)是弧头)邻接矩阵的第邻接矩阵的第 i 列元素之和。列元素之和。第8页/共117页6.2 6.2 图的存储结构及实现图的存储结构及实现图的存储结构及实现图的存储结构及实现有向图的邻接矩阵有向图的邻接矩阵V1V2V3V4V1 V2 V3 V4vertex=0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 arcs=V1 V2 V3 V4V1V2V3V4如何判断从顶点如何判断从顶点 i 到顶点到顶点 j 是否存在弧?是否存在弧?测试邻接矩阵中相应位置的元素测试邻接矩阵中相应位置的元素arcsij是否为是否为1。第9页/共117页网的邻
8、接矩阵网的邻接矩阵6.2 6.2 图的存储结构及实现图的存储结构及实现图的存储结构及实现图的存储结构及实现网的邻接矩阵可定义为:网的邻接矩阵可定义为:arcsij wij 若若(vi,vj)E(或(或E)0 若若i=j 其他,其他,是人为指定的一个数是人为指定的一个数V1V2V3V42785 0 2 5 0 0 8 7 0 arc=第10页/共117页邻邻接接矩矩阵阵数数据据类类型型描描述述#define MaxSize 20 typedef struct GelemType vertexMaxSize;/存顶点信息存顶点信息 ArcType arcsMaxSizeMaxSize;/存顶点间的
9、关系存顶点间的关系 int vertexNum,arcNum;/存顶点数和边数存顶点数和边数 MGraph;6.2 6.2 图的存储结构及实现图的存储结构及实现图的存储结构及实现图的存储结构及实现其中:其中:GelemTypeGelemType表示图中顶点的数据类型表示图中顶点的数据类型 ArcType ArcType表示图中边(弧)的数据类型表示图中边(弧)的数据类型第11页/共117页ABC该无向图需要存放以下该无向图需要存放以下信息:信息:1.1.顶点数据顶点数据A A、B B、C C2.2.顶点之间的邻接关系顶点之间的邻接关系3.3.无向图中的顶点数和无向图中的顶点数和边数边数第12页
10、/共117页对应的数据类型为:#define MaxSize 20 typedef struct char vertexMaxSize;/存顶点 int arcsMaxSizeMaxSize;/存顶点间的关系 int vertexNum,arcNum;/存顶点数和边数 MGraph;MGraph G;MGraph G;变量变量G G可以存放图,其中:可以存放图,其中:G.vertexiG.vertexi存放顶点值,存放顶点值,G.arcsijG.arcsij存放顶点的关系,存放顶点的关系,G.vertexNumG.vertexNum存放图的存放图的顶点数,顶点数,G.arcNumG.arcNu
11、m存放图的边数。存放图的边数。第13页/共117页ABC 0 1 1 1 0 11 1 03 3ABC无向图无向图MGraph G;变量变量G的存储结构示意图的存储结构示意图第14页/共117页ABC该有向图需要存放以下该有向图需要存放以下信息:信息:1.1.顶点数据顶点数据A A、B B、C C2.2.顶点之间的邻接关系顶点之间的邻接关系3.3.有向图中的顶点数和有向图中的顶点数和边数边数第15页/共117页ABC 0 1 1 0 0 00 1 03 3ABC有向图有向图MGraph G;变量变量G的存储结构示意图的存储结构示意图第16页/共117页该该无向网无向网需要存放以下需要存放以下信
12、息:信息:1.1.顶点数据:动物园、顶点数据:动物园、长城、故宫、野山坡长城、故宫、野山坡2.2.顶点之间的邻接关系顶点之间的邻接关系和边上的权和边上的权3.3.无向网中的顶点数和无向网中的顶点数和边数边数假设权代表距离假设权代表距离动物园故宫长城205030野山坡100第17页/共117页对应的数据类型为:#define MaxSize 20 typedef char MC10;typedef struct MC vertexMaxSize;/存顶点 int arcsMaxSizeMaxSize;/存顶点间的关系 int vertexNum,arcNum;/存顶点数和边数 MGraph;第1
13、8页/共117页动物园 故宫 长城 野山坡 0 20 30 -1 20 0 50 10030 50 0 -1-1 100 -1 04 4无向网无向网MGraph G;变量变量G的存储示意图的存储示意图动物园故宫长城205030野山坡第19页/共117页该有向网需要存放以下该有向网需要存放以下信息:信息:1.1.顶点数据顶点数据A A、B B、C C2.2.顶点之间的邻接关系顶点之间的邻接关系和弧上的权以及弧上的和弧上的权以及弧上的一些描述一些描述3.3.有向网中的顶点数和有向网中的顶点数和边数边数ABC205030CB之间有5个阀门假设假设A、B、C为三个小区,为三个小区,弧为地下天然气管道弧
14、为地下天然气管道第20页/共117页(1)对应的数据类型为:#define MaxSize 20 typedef struct int data;/存放边上的权 char str80;/用于指向描述边信息的字符串ArcType;typedef struct char vertexMaxSize;/存顶点的信息 ArcType arcsMaxSizeMaxSize;/存顶点间的关系 int vertexNum,arcNum;/存顶点数和边数 MGraph;第21页/共117页(2)对应的数据类型为:#define MaxSize 20 typedef struct int data;/存放边上的
15、权 char*p;/用于指向描述边信息的字符串ArcType;typedef struct char vertexMaxSize;/存顶点的信息 ArcType arcMaxSizeMaxSize;/存顶点间的关系 int vertexNum,arcNum;/存顶点数和边数 MGraph;第22页/共117页ABC 0 1000 30 20 0 1000 1000 50 0 3 3有向网有向网ABC205030CB之间有MGraph G;变量变量G存储结构示意图存储结构示意图表示字符型指针变量第23页/共117页基于邻接矩阵的无向图基本操作基于邻接矩阵的无向图基本操作创建函数创建函数 1.确定
16、图的顶点个数和边的个数;确定图的顶点个数和边的个数;2.输入顶点信息存储在一维数组输入顶点信息存储在一维数组vertex中;中;3.初始化邻接矩阵(每个元素置初始化邻接矩阵(每个元素置0););4.依次输入每条边存储在邻接矩阵依次输入每条边存储在邻接矩阵arcs中;中;4.1 输入边依附的两个顶点的序号输入边依附的两个顶点的序号i,j;4.2 将邻接矩阵的第将邻接矩阵的第i行第行第j列的元素值置为列的元素值置为1;4.3 将邻接矩阵的第将邻接矩阵的第j行第行第i列的元素值置为列的元素值置为1;6.2 6.2 图的存储结构及实现图的存储结构及实现图的存储结构及实现图的存储结构及实现第24页/共1
17、17页void creatMGraph(MGraph&G)printf(“请输入顶点数和边数:”);scanf(“%d%d”,&G.vertexNum,&G.arcNum);for(i=0;iG.vertexNum;i+)printf(“请输入第%d个顶点的值:,i+1);scanf(&G.vertexi);for(i=0;iG.vertexNum;i+)/初始化邻接矩阵 for(j=0;jG.vertexNum;j+)G.arcsij=0;for(k=0;kG.arcNum;k+)/依次输入每一条边 printf(“请输入第%d条边依附的两个顶点的序号:,k+1);scanf(%d%d,&i
18、,&j);/边依附的两个顶点的序号 G.arcsij=1;G.arcsji=1;/置有边标志 创建无向图创建无向图创建无向图创建无向图有向图怎样创建?有向图怎样创建?第25页/共117页void creatMGraph(MGraph&G)printf(“请输入顶点数和弧数:”);scanf(“%d%d”,&G.vertexNum,&G.arcNum);for(i=0;iG.vertexNum;i+)printf(“请输入第%d个顶点的值:,i+1);scanf(&G.vertexi);printf(“请输入弧不存在的标志”);scanf(&flag)for(i=0;iG.vertexNum;i
19、+)/初始化邻接矩阵 for(j=0;jG.vertexNum;j+)if(i=j)G.arcsij=0;else G.arcsij=flag;/依次读入每条弧和权,建立邻接矩阵创建无向网创建无向网创建无向网创建无向网第26页/共117页/依次输入每一条弧for(k=0;kG.arcNum;k+)printf(“请输入第%d条弧的弧尾、弧头的序号和权值:,k+1);scanf(%d%d%d,&i,&j,&w);G.arcsij=w;G.arcsji=w;/置有弧的权值 创建无向网创建无向网创建无向网创建无向网有向网怎样创建?有向网怎样创建?第27页/共117页基于邻接矩阵的基于邻接矩阵的连通图
20、连通图基本操作基本操作深度优先遍历深度优先遍历void DFS(MGraph G,int v,int visited)/)/递归递归 printf(G.vertexv);visited v=1;for(j=0;jG.vertexNum;j+)if(G.arcsvj=1&visitedj=0)DFS(G,j,visited);6.2 6.2 图的存储结构及实现图的存储结构及实现图的存储结构及实现图的存储结构及实现其中:其中:v是顶点编号,是顶点编号,visited指向一个存放指向一个存放顶点是否遍历过的标志数组,初始值为顶点是否遍历过的标志数组,初始值为0第28页/共117页分析在图的邻接矩阵上
21、的递归的深度优先遍历过程ADBC1 10 02 23 3第29页/共117页 A B C D 0 0 0 0 0 1 1 1 1 0 1 0 1 1 0 1 1 0 1 01A1BC1D1第30页/共117页基于邻接矩阵的基于邻接矩阵的非连通图非连通图基本操作基本操作深度优先遍历深度优先遍历void DFSTraverse(void DFSTraverse(MGraphMGraph G)G)/对图对图 G G 作深度优先遍历作深度优先遍历 for(v=0;vG.vertexNum;+v)for(v=0;vG.vertexNum;+v)visitedv=0;/visitedv=0;/访问标志数组
22、初始化访问标志数组初始化 for(v=0;vG.vertexNum;+v)for(v=0;vG.vertexNum;+v)if(!visitedv)DFS(G,v,visited);if(!visitedv)DFS(G,v,visited);/对尚未访问的顶点调用对尚未访问的顶点调用DFSDFS 6.2 6.2 图的存储结构及实现图的存储结构及实现图的存储结构及实现图的存储结构及实现如何求无向图的连通分量如何求无向图的连通分量第31页/共117页基于邻接矩阵的基于邻接矩阵的连通图连通图基本操作基本操作广度优先遍历广度优先遍历void BFS(MGraph G,int v,int visited
23、)InitQueue(Q);printf(G.vertexv);visitedv=1;EnQueue(Q,v);while(!EmptyQueue(Q)DeQueue(Q,v);for(j=0;jG.vertexNum;j+)if(G.arcsvj=1&visitedj=0)printf(G.vertexj);visitedj=1;EnQueue(Q,j);6.2 6.2 图的存储结构及实现图的存储结构及实现图的存储结构及实现图的存储结构及实现第32页/共117页基于邻接矩阵的基于邻接矩阵的非连通图非连通图基本操作基本操作广度优先遍历广度优先遍历void BFSTraverse(void BF
24、STraverse(MGraphMGraph G)G)/对图对图 G G 作广度优先遍历。作广度优先遍历。for(v=0;vG.vertexNum;+v)for(v=0;vG.vertexNum;+v)visitedv=0;/visitedv=0;/访问标志数组初始化访问标志数组初始化 for(v=0;vG.vertexNum;+v)for(v=0;vG.vertexNum;+v)if(!visitedv)BFS(G,v,visited);if(!visitedv)BFS(G,v,visited);/对尚未访问的顶点调用对尚未访问的顶点调用BFSBFS 6.2 6.2 图的存储结构及实现图的存
25、储结构及实现图的存储结构及实现图的存储结构及实现如何求无向图的连通分量如何求无向图的连通分量第33页/共117页邻接表邻接表邻接表邻接表邻接表存储的基本思想邻接表存储的基本思想:对于图的每个顶点:对于图的每个顶点v vi i,将所将所有邻接于有邻接于v vi i的顶点链成一个单链表,称为顶点的顶点链成一个单链表,称为顶点v vi i的的边边表表(对于有向图则称为出边表),所有边表的头指(对于有向图则称为出边表),所有边表的头指针和存储顶点信息的一维数组构成了针和存储顶点信息的一维数组构成了顶点表顶点表。6.2 6.2 图的存储结构及实现图的存储结构及实现图的存储结构及实现图的存储结构及实现图的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 资料 学习 教程
限制150内