图遍历及生成树.pptVIP

  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文档。上传文档
查看更多
图遍历及生成树

图的遍历与求图的连通分量 图的遍历: 从给定图中任意指定的顶点出发,按照某种方式系统地访问图中的顶点,使每个顶点仅被访问一次,所得到的一个序列 访问标志位visit[ ] 遍历前置visit的各元素为0 若顶点vi被访问过,则置visit[i]为1 深度优先搜索 广度优先搜索 深度优先搜索 首先访问出发顶点v0 选择一个与v0相邻接的且末访问过的顶点w访问 再从w开始,按深度优先搜索….. 每当到达一个其所相邻接的顶点都已被访问过的顶点,则从最后所访问的顶点开始,依次退回到尚有邻接顶点末曾访问过的顶点u,并从u开始进行深序优先搜索….. 直到所有顶点都访问过或从任何一个已访问过的顶点出发,再也无法到达末曾访问过的顶点 深度优先搜索 广度优先搜索法 首先访问出发点v 然后访问与顶点v邻接的全部顶点w1,w2,….,wt 再依次访问与w1,w2,….,wt邻接的全部结点(已访问过的顶点除外) 再从这些已访问的顶点出发,依次访问与它们邻接的全部顶点(已访问的顶点除外) 依次类推,直到图中所有顶点都访问到或出发顶点V所在的连通分量的所有顶点都有被访问到为止 广度优先搜索法 广度优先搜索法 把队列置空 输出出发顶点,置该顶点已被访问的标志 让出发顶点进队 若队列不空,则 取出队首中的顶点V 在邻接表中,依次取得与顶点V邻接的各个顶点 转(4) 若队列空,则处理过程结束 求图的连通分量 对图的每一个顶点进行检验 若被访问过,则该顶点落在已被求出的连通分量上 若末被访问过,则从该顶点出发遍历图,便可求得图的另一个连通分量 生成树和最小生成树 生成树: 设G是一个连通无向图,若G’是包含G中所有顶点的一个无回路的连通子图,则称G’是G的一棵生成树 生成树 从G中任一顶点出发,遍历图中的所有顶点,在遍历过程中,将E分成两个集合T(G)和B(G),其中T(G)是遍历时所通过的边集,B(G)是剩余的边集,则G’=(V,T(G))是G的一棵生成树 dfs生成树 bfs生成树 最小生成树 一个带权连通无向图G的最小生成树是G的所有生成树中边上的权之和最小的一棵生成树 MST性质: 设G(V,E)是一个连通带权的无向图,T=(U,E*)是正在构造的最小生成树.若边(u,v)的顶点u?U,v?V-U,且(u,v)的代价最小,则(u,v)必然存在于最小生成树 Prim算法 已知G=(V,E)是一个带权连通无向图,顶点V={1,2,….n}, U为V中构成最小生成树的顶点集合 初始时U={v0},v0是指定的某个顶点,v0?V T为构成最小生成树的边的集合,初始时T为空 如果(u,v)具有最小代价,且u ?U,v?V-U,则最小生成树包含边(u,v),即把u加到U中,把(u,v)加入T中 这个过程一直进行下去,直到U=V时为止 这时T即为所求的最小生成树 Prim算法步骤 设T是带权连通无向图G=(V,E)的最小生成树,初始时T为空,U为最小生成树的顶点集合,初始时U={v0},v0是指定的某一个开始顶点. 若U=V,则算法终止;否则,从E中选一条代价最小的边(u,v),,使得u?U,v?V-U.将顶点v加到U中,将边(u,v)加到T中,…... * * 1 2 3 4 5 6 7 8 9 1 4 2 5 3 1 3 5 ^ 1 2 4 1 3 5 ^ 2 3 4 ^ 2 3 4 ^ 5 ^ 1 2 3 4 5 #include stdio.h #define MAXN 50 #define MAXN 100 struct l_node {int ver; struct l_node *link;}; typedef struct l_node L_NODE; typedef struct{int ver1; int ver2;} E_NODE; L_NODE *head[MAXN]; int visit[MAXN]; E_NODE e[MAXN]; int n,m,u; void creat_adj_list(head,n,e,m) L_NODE *head[ ]; E_NODE e[ ]; int n,m; {int i,u,v; L_NODE *p; for (i=1;i=n;i++) head[i]=NULL; for(i=0;im;i++) { u=e[i].ver1; v=e[i]=ver2; p=(L_NODE*)moall

文档评论(0)

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

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

1亿VIP精品文档

相关文档