2010年勤思考研数据结构讲义-图.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2010年勤思考研数据结构讲义-图

图 图的有关概念 图,顶点,弧,弧头,弧尾;有向图(顶点集+弧集),0≤e≤n(n-1),无向图(顶点集+边集),0≤e≤n(n-1)/2;稀疏图(enlogn),稠密图;完全图e=n(n-1)/2,有向完全图e=n(n-1);网,有向网,无向网。子图,邻接点,顶点的度,入度,出度;路径,路径长度(经过边或弧的数目),简单路径,回路(环),简单回路(简单环);连通图,连通分量,强连通分量。 例:有6个顶点组成的无向图构成连通图,最少需要(_a_)条边;当边的数目大于(_b_)时,该图必定连通。 分析:a. 5。最少有n-1条边就可以构成连通图。 b. 10。考虑将n个顶点分成两组,一组有n-1个顶点,另一组只有1个顶点。首先在第一组中添加边,直到n-1个顶点构成全连通子图,共(n-1)(n-2)/2条边,此后若再在图中任意添加一条边将必定连通两组顶点,从而构成连通图。 思考:对有向图有何结论。 图的存储结构 图的存储结构 常见图的存储结构有:邻接矩阵,邻接表,逆邻接表,十字链表,邻接多重表。 邻接多重表只适用于存储无向图,其他存储结构可以存储无向图和有向图。 例:画出图的邻接矩阵、邻接表、逆邻接表和十字链表。 邻接矩阵 简言之,“数组(顶点)+二维数组(弧)+个数”。 const int MAX_VERTEX = 最大顶点个数; typedef struct Graph { // 图 VertexType vexs[MAX_VERTEX]; // 顶点向量 ArcType arcs[MAX_VERTEX] [MAX_VERTEX]; // 邻接矩阵 int vexnum, arcnum; // 顶点和弧的个数 } Graph; 图:有边(弧)为1;否则为0。网:有边(弧)为权值;否则为∞。 存储空间个数为n2,与边的数目无关。 无向图的邻接矩阵是对称的。 邻接表 简言之,“数组(弧尾顶点)+链表(邻接点)+个数”。 typedef struct ArcNode { // 弧结点 int adjvex; // 邻接点 struct ArcNode *nextarc; // 下一个邻接点 } ArcNode; typedef struct VexNode { // 顶点结点 VertexType data; // 顶点信息 ArcNode *firstarc; // 第一个邻接点 } VexNode; const int MAX_VERTEX = 最大顶点个数; typedef struct Graph { // 图 VexNode vexs[MAX_VERTEX]; // 顶点向量 int vexnum, arcnum; // 顶点和弧的个数 } Graph; 边(弧)多则需要存储空间多。 逆邻接表 简言之,“数组(弧头顶点)+链表(逆邻结点)+个数”。 类型定义类似邻接表。 十字链表 简言之,“数组(顶点)+弧结点(含头和尾)+个数”。边可以看作两条弧。 typedef struct ArcNode { // 弧结点 int vtail, vhead; // 弧尾和弧头顶点编号 struct ArcNode *nexttail, *nexthead; // 指向同弧尾和同弧头的弧结点 } ArcNode; typedef struct VexNode { // 顶点结点 VertexType data; // 顶点信息 ArcNode *firstin, *firstout; // 指向第一条入弧和第一条出弧 } VexNode; const int MAX_VERTEX = 最大顶点个数; typedef struct Graph { // 图 VexNode vexs[MAX_VERTEX]; // 顶点向量 int vexnum, arcnum; // 顶点和弧的个数 } Graph; 弧结点中包含两个指针分别指向同一弧头的下一个弧和同一个弧尾的下一个弧。顶点结点则指向第一个同弧头和弧尾的弧。十字链表相当于邻接表和逆邻接表的结合。 技巧:把弧结点按行排整齐,然后画链表。同弧尾的弧组成链表,同弧头的弧组成链表。 邻接多重表 简言之,“数组(顶点)+边结点”。 typedef struct EdgeNode { // 边结点 int vexi, vexj; // 边的两个顶点 struct EdgeNode *nexti, *nextj; // 两个顶点所依附的下一条边 } EdgeNode; typedef struct VexNode { // 顶点结点 VertexType dat

文档评论(0)

2017ll + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档