网站大量收购独家精品文档,联系QQ:2885784924

数据结构-清华大学严蔚敏PPT200~400.ppt

  1. 1、本文档共201页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构-清华大学严蔚敏PPT200~400

图7-8 带权有向图的数组存储 (b) 顶点矩阵 vexs a b c d e (c) 邻接矩阵 ∞ 6 2 ∞ ∞ ∞ ∞ ∞ ∞ 3 ∞ 3 ∞ 1 ∞ ∞ 4 ∞ ∞ 5 ∞ ∞ ∞ ∞ ∞ (a) 带权有向图 3 5 4 1 2 6 a b c d e 3 ⑶ 有向图邻接矩阵的特性 ◆ 对于顶点vi,第i行的非0元素的个数是其出度OD(vi);第i列的非0元素的个数是其入度ID(vi) 。 ◆ 邻接矩阵中非0元素的个数就是图的弧的数目。 3 图的邻接矩阵的操作 图的邻接矩阵的实现比较容易,定义两个数组分别存储顶点信息(数据元素)和边或弧的信息(数据元素之间的关系) 。其存储结构形式定义如下: #define INFINITY MAX_VAL /* 最大值∞ */ /* 根据图的权值类型,分别定义为最大整数或实数 */ #define MAX_VEX 30 /* 最大顶点数目 */ typedef enum {DG, AG, WDG,WAG} GraphKind ; /* {有向图,无向图,带权有向图,带权无向图} */ typedef struct ArcType { VexType vex1, vex2 ; /* 弧或边所依附的两个顶点 */ ArcValType ArcVal ; /* 弧或边的权值 */ ArcInfoType ArcInfo ; /* 弧或边的其它信息 */ }ArcType ; /* 弧或边的结构定义 */ typedef struct { GraphKind kind ; /* 图的种类标志 */ int vexnum , arcnum ; /* 图的当前顶点数和弧数 */ VexType vexs[MAX_VEX] ; /* 顶点向量 */ AdjType adj[MAX_VEX][MAX_VEX]; }MGraph ; /* 图的结构定义 */ 利用上述定义的数据结构,可以方便地实现图的各种操作。 (1) 图的创建 AdjGraph *Create_Graph(MGraph * G) { printf(“请输入图的种类标志:”) ; scanf(“%d”, G-kind) ; G-vexnum=0 ; /* 初始化顶点个数 */ return(G) ; } (2) 图的顶点定位 图的顶点定位操作实际上是确定一个顶点在vexs数组中的位置(下标) ,其过程完全等同于在顺序存储的线性表中查找一个数据元素。 算法实现: int LocateVex(MGraph *G , VexType *vp) { int k ; for (k=0 ; kG-vexnum ; k++) if (G-vexs[k]==*vp) return(k) ; return(-1) ; /* 图中无此顶点 */ } HT[k].Parent=HT[k].Lchild=HT[k].Rchild=0 ; } /* 初始化向量HT */ for (k=n+1; km ; k++) { unsigned w1=32767 , w2=w1 ; /* w1 , w2分别保存权值最小的两个权值 */ int p1=0 , p2=0 ; /* p1 , p2保存两个最小权值的下标 */ for (j=1 ; j=k-1 ; j++) { if (HT[k].Parent==0) /* 尚未合并 */ { if (HT[j].Weightw1) { w2=w1 ; p2=p1 ; w1=HT[j].Weight ; p1=j ; } else if (HT[j].Weightw2) { w2=HT[j].Weight ; p2=j ; } } /* 找到权值最小的两个值及其下标 */ } HT[k].Lchild=p1 ; HT[k].Rchild=p2 ; HT[k].weight=w1+w2 ; HT[p1].Parent=k ; HT[p2].Parent=k ; } }

文档评论(0)

wyjy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档