输出图的连通分量算法实现

上传人:飞****9 文档编号:131944801 上传时间:2020-05-11 格式:DOC 页数:3 大小:30KB
返回 下载 相关 举报
输出图的连通分量算法实现_第1页
第1页 / 共3页
输出图的连通分量算法实现_第2页
第2页 / 共3页
输出图的连通分量算法实现_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《输出图的连通分量算法实现》由会员分享,可在线阅读,更多相关《输出图的连通分量算法实现(3页珍藏版)》请在金锄头文库上搜索。

1、/输出图的连通分量算法实现#include #include #define MAXN 20/顶点数的最大值#define MAXM 40/边数的最大值#define min(a,b) (a)(b)?(b):(a)struct edgeint u, v;/边的两个顶点void output( ) printf( %d-%d, u, v ); int comp( edge& t ) return ( (u=t.u & v=t.v) | (u=t.v & v=t.u) );edge edgesMAXM;/边的数组(模拟栈)int se;/栈顶int EdgeMAXNMAXN;/邻接矩阵(1表示有连

2、接,2表示有连接且已经走过,0表示没有连接)int visitedMAXN;/表示顶点访问状态int n, m;/顶点数、边数int tmpdfn;/在dfs过程中记录当前的深度优先搜索序数int dfnMAXN;/每个顶点的dfn值int lowMAXN;/每个顶点的low值,根据该值来判断是否时关节点/深度优先搜索,记录每个节点的low值(根据low值来判断是否求关节点)void dfs( int u )for( int v=1; v= dfnu )/删除顶点u,子女节点v所在的子树将脱离bool firstedge = true;/控制最后一条边后面没有空格的状态变量while( 1 )

3、if( se0 ) break;if( firstedge ) firstedge = false;else printf( );edge t1;t1 = edgesse;t1.output( );/输出栈顶节点t1edgesse.u = 0; edgesse.v = 0;/删除栈顶t1se-;if( p(t) ) break;printf( n );/此前v已经访问过了,v是u的祖先节点((v,u)就是一条回边):情形else lowu = min(lowu, dfnv);int main( )int i;/循环变量int u, v;/从输入文件中读入的顶点对int number = 1;

4、/测试数据数目freopen( data.txt, r, stdin );freopen( out.txt, w, stdout );while( 1 )scanf( %d%d, &n, &m );if( n=0 & m=0 ) break;/整个输入结束memset( Edge, 0, sizeof(Edge) );for( i=1; i1 ) printf( n );/保证最后一个网络的输出之后没有空行number+;low1 = dfn1 = 1;tmpdfn = 1;memset( visited, 0, sizeof(visited) ); visited1 = 1;memset( edges, 0, sizeof(edges) );se = -1;dfs( 1 );/从顶点1出发进行DFS搜索return 0;代码转载注明http:/

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号