数据结构__图的基本知识点.ppt

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

例 1 6 5 4 3 2 6 5 1 3 5 6 6 4 2 5 1 3 1 1 6 3 1 4 1 6 4 3 1 4 2 1 1 6 4 3 2 1 4 2 5 1 6 5 4 3 2 1 4 2 5 3 Prim算法最小生成树生成过程事例(从1号顶点开始) 课堂练习:写出如下连通网的最小生成树过程 1 6 5 4 3 2 4 9 6 10 20 14 5 10 10 6 1 6 5 4 3 2 4 9 5 10 6 最小生成树1 1 6 5 4 3 2 4 9 5 10 6 最小生成树2 最小生成树 不唯一! i 0 1 2 3 4 5 d[i].adj 0 0 0 0 0 0 d[i].dist 0 1 ∞ ∞ 5 8 定义一个结构数组: struct cost{ int adj; int dist; }d[20]; 2、算法实现 0 2 3 1 5 4 5 1 8 3 9 7 6 2 说明: i—数组下标,又是图中对应顶点的序号 d[i].adj—表示i号顶点与生成树中顶点集合U距离最小的顶点号(u) d[i].dist—表示i号顶点与生成树中adj顶点(u号顶点)的距离,当dist=0时表示i号顶点已到生成树中。 生成树初始 选0号顶点 2、算法实现 i 0 1 2 3 4 5 d[i].adj 0 0 0 0 0 0 d[i].dist 0 1 ∞ ∞ 5 8 0 2 3 1 5 4 5 1 8 3 9 7 6 2 (1)取d数组中dist≠0的最小值,则把u=0, v=1,w=1送入生成树,其顶点集为:{0,1},并修改数组d的内容 i 0 1 2 3 4 5 d[i].adj 0 1 1 0 0 0 d[i].dist 0 0 2 ∞ 5 8 生成树初始 选0号顶点 u v w (2)取d数组中dist≠0的最小值,则把u=1, v=2,w=2送入生成树,其顶点集为:{0,1,2},并修改数组d的内容 i 0 1 2 3 4 5 d[i].adj 0 1 1 0 0 0 d[i].dist 0 0 2 ∞ 5 8 i 0 1 2 3 4 5 d[i].adj 0 1 2 2 0 2 d[i].dist 0 0 0 7 5 6 i 0 1 2 3 4 5 d[i].adj 0 1 2 2 0 2 d[i].dist 0 0 0 7 5 6 (3)取d数组中dist≠0的最小值,则把u=0, v=4,w=5送入生成树,其顶点集为:{0,1,2,4},并修改数组d的内容 i 0 1 2 3 4 5 d[i].adj 0 1 2 4 4 2 d[i].dist 0 0 0 3 0 6 (4)取d数组中dist≠0的最小值,则把u=4, v=3,w=3送入生成树,其顶点集为:{0,1,2,4,3},并修改数组d的内容 i 0 1 2 3 4 5 d[i].adj 0 1 2 4 4 2 d[i].dist 0 0 0 3 0 6 i 0 1 2 3 4 5 d[i].adj 0 1 2 3 4 2 d[i].dist 0 0 0 0 0 6 i 0 1 2 3 4 5 d[i].adj 0 1 2 3 4 2 d[i].dist 0 0 0 0 0 6 (5)取d数组中dist≠0的最小值,则把u=2, v=5,w=6送入生成树,其顶点集为:{0,1,2,4,3,5},并修改数组d的内容 i 0 1 2 3 4 5 d[i].adj 0 1 2 3 4 5 d[i].dist 0 0 0 0 0 0 无向网的建立: #include stdio.h #define INF 32767 typedef struct{ int u, v, w; }Tree; /*最小生成树顺序存储元素类型*/ void CreateGraph(MGraph *g) { int i, j, w, e; FILE *fp; /*文件指针fp*/ fp=fopen(graph.dat, r); /*打开数据文件*/ /*图的顶点数和边数、顶点数据和边的信息从文件获取*/ fscanf(fp,%d %d, g-vn, g-en); for(i=0;ig-vn;i++) /*邻接矩阵初始化*/ for(j=0;jg-vn;j++) /*对角线为0,其余为∞*/ if(i==j) g-arc[i][j]=0; else g-arc[i][j]=INF; 0 2 3 1 5 4 5 1 8 3 9 7 6 2 无向网的建立(续): for

文档评论(0)

文档精品 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:6203200221000001

1亿VIP精品文档

相关文档