




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二节图的存储结构
当前讲授
对于具有n个顶点的图,最常采用的存储方法有邻接矩阵存储方法
与邻接表存储方法。
一、邻接矩阵表示法
1、邻接矩阵
设G=(V,E)是具有n个顶点的图,则G的邻接矩阵是具有如下
定义的n阶方阵:
J1当,Vj)或Wi,Vp是E(G)的边
[l]bJ=I0当(Vi,Vj)或Wi,Vj>不是E(G)的边
【例】
1ooA
1io
10ii
1101
1oj
01
1100、
0010
1001
0101
00ooy
1619821A
OOOO6OO
coOO1833
618oo14
OO3314
2.采用邻接矩阵存储方法具有以下特点:
①无向图的邻接矩阵一定是一个对称矩阵。因此,按照压缩存储
的思想,在具体存放邻接矩阵时只需存放上(或者下)三角形阵的元
素即可。
②不带权的有向图的邻接矩阵一般来说是一个稀疏矩阵(特别是
对于稀疏图),于是可以采用三元组表的方法存储邻接矩阵。
③对于无向图,邻接矩阵的第i行(或者第i列)非零元素(或者
非8元素)的个数正好是第i个顶点的度D(Vi)o
(4)对于有向图,邻接矩阵的第i行(或者第i歹I」)非零元素(或者
非8元素)的个数正好是第i个顶点的出度OD(Vi)(或者入度ID
(V.))o
⑤对于无向图,邻接矩阵的所有非零元素(或者非8元素)的个数
正好是边数的2倍。
⑥对于有向图,邻接矩阵的所有非零元素(或者非8元素)的个数
正好等于弧数。
⑦一个图的邻接矩阵表示是唯一的。
【真题选解】
(例题•填空题)若无向图G中有n个顶点m条边,采用邻接矩阵
存储,则该矩阵中非0元素的个数为O
隐藏答案
【答案】2m
【解析】对于无向图,邻接矩阵的所有非零元素的个数正好是边数
的2倍。
3、邻接矩阵表示的存储结构定义
#defineMaxVertexNum50〃最
大顶点数
typedefStruct
{vertexTvpevexs[MaxVertexNum];〃顶
点数组,类型假定为char型
Adjmstrixarcs[MaxVertexNum][Max\/ertexNum];//
邻接矩阵,假定为int型
}MGQph;
4、建立一个无向网的算法
【算法描述】
VoidCreateMGraph(MGraph*G,intn,inte)
{〃采用邻接矩阵表示法构造无向网G,r、e表示图的当前顶点
数和边数
inti,j,k,w;
scanf("%d,%d",&n,&e);〃读
入顶点数和边数
for(i=0;i<n;i++)〃输
入顶点信息
scanf("%c",&G->vexs[i]);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
G->arcs[i][j]=INT_MAX;〃初始
化邻接矩阵元素为无穷大,一般填32767
for(k=0;k<e;k++)〃读入
e条边,建立邻接矩阵
〃读入一
条边的两端顶点序号i、j及边上的权W
{scanf("%d,%d,%d",&i,&j,&w);
G->arcs[i][j]=w;
G->arcs[j][i]=w;〃置矩
阵对称元素权值
)
)
算法的时间复杂度0(n2)
二、邻接表表示法
1、邻接表
对于具有n个顶点的图建立n个线性链表。每一个链表最前面都分
别设置一个称之为顶点表结点,n个顶点构成一个数组结构。第i个链
表中的每一个链结点称之为边表结点。
【例】
顶点表边表
无向图无向图的邻接表
顶点表入边表
有向图的逆邻接表
2、采用邻接表存储方法具有以下特点:
①一个图的邻接表表示法不唯一,这是因为邻接表中各结点的链
接次序取决于建立邻接表的算法(前插法还是后插法建链表)及边的
输入次序。
②对于无向图,若它有n个顶点,e条边,则其邻接表中需要
2e+n个结点。其中有2e个边表结点,n个顶点表结点。边表结点的
个数一定是偶数,为边数的2倍。
③对于有向图,若它有n个顶点,e条边,则其邻接表中需要
e+n个结点。其中有e个边表结点,n个顶点表结点。
④对于无向图,第i个链表中的边表结点的数目是第i个顶点的
度。
⑤对于有向图,第i个链表中的边表结点的数目是第i个顶点的出
度。在其逆邻接表中,第i个链表中的边表结点的数目是第i个顶点的
入度。
3、图的邻接表存储结构定义
#defineMaxVertexNum20
typedefcharVertexType;
typedefstructnode〃边表结点类型
{intadjvexj〃顶点的序号
structnode*next;〃指向下一条边的指
针
}EdgeNode;
typedefstructvnode〃顶点表结点
{VertexTypevertex;〃顶点域
EdgeNode*link;〃边表头指针
}VNode,Adjlist[MaxVertexNum];〃邻接表
typedefAdjlistALGr■叩h;〃定义为图类型
4、无向图邻接表的建表算法:
voidCreateGraph(ALGraphGL,intn,inte)
{〃n为顶点数,e为图的边数
inti,j,k;EdgeNode*p;
for(i=0;i<n;i++)〃建立顶点表
{GL[i].vertex=getchar();〃读入顶点信
息
GL[i].link=NULL;〃边表头指针
置空
)
for(k=0;k<e;k++)〃采用头插法
建立每个顶点的邻接表
{scanf("%d,%d",&i,&j);〃读入边
(vi,vj)的顶点序号
p=(EdgeNode*)malloc(sizeof(EdgeNode));
〃生成新的边表结
点
p->adjvex=j;〃将邻接点序号
j赋给新结点的邻接点域
p->next=GL[i].link;
GL[i].link=p;〃将新结点插入
到顶点vi的边表头部
p=(EdgeNode*)malloc(sizeof(EdgeNode));
〃生成新的边表结点
p->adj.vex=i;〃将邻接点序号
i赋给新结点的邻接点域
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (高清版)DB12∕T 490.1-2013 社区管理和服务信息化规范 第1部分:总则
- (高清版)DB12∕T 673-2016 营运车辆二级维护企业技术条件
- 退休座谈会感人发言稿
- 医疗机构自查报告8篇
- 2024年证券从业考试深度剖析试题及答案
- 2025年联营合作协议模板
- 考前准备:CPMM考试时间管理技巧及试题及答案
- 2025年两人合伙开店合作协议模板
- 2025年度离婚债务分割与财产清算协议
- 2025年度酒店预订与会议场地租赁合同
- 2024年7月国家开放大学法律事务专科《民法学(2)》期末纸质考试试题及答案
- 绿化道路及室外管网等工程施工组织设计
- 70岁老人用工免责协议书
- 军人抚恤优待条例培训2024
- 2021年高级经济师《高级经济实务》建筑与房地产经济专业考试题库及答案解析
- 培训机构老师职业规划
- 工厂厂长年终总结汇报
- 《公路桥梁挂篮设计与施工技术指南》
- (一模)宁波市2024学年第一学期高考模拟考试 物理试卷(含答案)
- 人教版高中物理选择性必修第三册第五章原子核第2节放射性元素的衰变课件
- 人教版小学六年级下册音乐教案全册
评论
0/150
提交评论