- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 图的连通性问题 连通性初步 Question:如果一个无向图是非连通图,从某个顶点出发,能否遍历到所有的顶点? Answer:对非连通图,从某个顶点出发进行遍历,只能遍历到它所在的连通子图上的所有顶点。 依次从每个未访问过的顶点出发进行遍历,就可以遍历完所有的顶点,并且可以得到非连通图的连通分量个数。 关节点及重连通图 重连通分量 判断关节点的朴素方法 求关节点的算法 注意: 如果u和v是2个顶点,且在深度优先搜索生成树中u是v的祖先,则有dfn[u]dfn[v],表明u的深度优先数小于v,u先于v被访问。 回边与交叉边 顶点u是关节点的充要条件: 问题:找到关节点以后,去掉该关节点,将原来的连通图分成了几个连通分量? 对根节点:有几个子女,就分成了几个连通分量; 如果不是根节点:有n个子女w ,使得low[w]=dfn[u],则去掉该节点,分成了n+1个连通分量。 ZOJ题目 1119 解题报告 * 信息学院信息技术教研室 Vt V2 V4 V3 V1 2 4 8 4 2 7 9 1 4 6 V1 V8 V9 V10 V7 V4 V3 V6 V5 V2 图论算法理论、 实现及应用 王桂平 //从顶点n出发,DFS遍历 int DFS( int n ) { visited[n]=1; for(int i=1; i=nodes; i++) { if( node[n][i]==1 !visited[i] ) DFS(i); } return 0; } //依次从每个未访问过的顶点 //出发DFS subnets=0; for( int n=1; n=nodes; n++ ) { if(!visited[n]) { DFS(n); subnets++; } } 0 1 2 3 4 5 6 7 8 9 关节点:在一个无向连通图G中,当且仅当删去G中的顶点v及其所关联的边后,可将图分割成2个或2个以上的连通分量,则称顶点v为关节点(Articulation Point),或者称为割顶。 图(1)中,顶点1、3、5、7都是关节点 重连通图:没有关节点的连通图。在重连通图上,任何一对顶点之间至少存在有2条路径,在删去某个顶点及其所关联的边时,也不破坏图的连通性。 如果连通图G不是重连通图,那么它可以包括几个重连通分量。一个连通图的重连通分量是该图的极大连通子图。 图(1)包含了6个连通分量 0 1 2 3 4 5 6 7 8 9 1 7 7 依次去掉每个顶点(及其所关联的边),然后用DFS去搜索整个图,可得到该图的连通分量的个数,如果是大于2,则该顶点是关节点。(这种方法复杂度很高,只适合规模较小的题目) 例子:ZOJ 1311 //依次去掉每个顶点(及其所关联的边),用DFS遍历剩下的子图,得连通分量个数 for(int m=1; m=nodes; m++) { int subnets=0; //子网数目 memset(visited,0,sizeof(visited)); for( int n=1; n=nodes; n++ ) { if(m==n) continue;//跳过顶点n(并不需要真正去掉顶点n) if(!visited[n]) { DFS(m,n); //去掉顶点m,从顶点n出发DFS subnets++; } } if(subnets1) SPF++; } //去掉第m个顶点及其所关联的边,从第n个顶点出发进行DFS int DFS( int m, int n ) { visited[n]=1; for(int i=1; i=nodes; i++) { if( i==m ) continue; //不考虑第m个顶点 if( node[n][i]==1 !visited[i] ) DFS(m,i); } return 0; } 从顶点3出发进行深度优先搜索,得到图(b)所示的生成树,并改画成图(c)所示的树形形状。 图(c)中每个顶点外侧的数字标明了进行深度优先搜索时各顶点访问的次序,称为顶点的深度优先数,可以记在数组dfn中。 0 1 2 3 4 5 6 7 8 9 (a) 0 1 2 3 4 5 6 7 8 9 (b) 1 2 3 4 5 10 9 8 7 6 0 1 2 3 4 (c) 1 2 3 4 5 10 9 8 7 6 9 7 6 5 8 0 1 2 3 4 (c) 1 2 3 4 5 10 9 8 7 6 9 7 6 5 8 回边:当且仅当u在生成树中是v的祖先,或者v是u的祖先,非生成树的边(u,v)
文档评论(0)