版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验报告课程名称 数据结构 实验项目名称 有向图的强连通分量 班级与班级代码 14计算机实验班 实验室名称(或课室) 实验楼803 专 业 计算机科学与技术 任课教师 学 号: 姓 名: 实验日期: 2015年 12 月 03 日 广东财经大学教务处 制姓名 实验报告成绩 评语: 指导教师(签名) 年 月 日说明:指导教师评分后,实验报告交院(系)办公室保存。一、实验目的与要求采用邻接表存储的有向图。二、实验内容(1)创建N个节点的空图DiGraph CreateGraph(int NumVertex)/创建一个N个节点的空图DiGraph G;G = malloc( sizeof( stru
2、ct Graph ) );if( G = NULL ) FatalError( "Out of space!" );G->Table = malloc( sizeof( struct TableEntry ) * NumVertex );if( G->Table = NULL )FatalError( "Out of space!" );G->NumVertex = NumVertex;G->NumEdge = 0;int i;for (i=0;i<NumVertex;i+)G->Tablei.Header=MakeE
3、mpty(NULL);G->Tablei.V=i; return G;(2) 在图G上执行DFS,通过对DFS生成森林的后序遍历对G的顶点编号。/后序DFS遍历图G,并将节点按后序遍历的顺序编号int *PostDFS(DiGraph G)int NumVertex=G->NumVertex;int visitedNumVertex;int i;for (i=0;i<NumVertex;i+)visitedi=0;/初始化,所有节点都未被访问过int *post = malloc( sizeof( int ) * NumVertex );/用于存放后序DFS遍历时,节点的编号
4、if( post = NULL ) FatalError( "Out of space!" );int postCounter=0;/定义一个内嵌的DFS函数void DFS (Vertex v)/从节点v出发执行DFSvisitedv=1;/标记该节点被访问Position P = Header( G->Tablev.Header );if( !IsEmpty( G->Tablev.Header ) ) do/对节点v的所有邻接点递归调用DFS P = Advance( P ); Vertex w=Retrieve( P ); if (visitedw=0)/
5、v的邻接点w未被访问过 DFS(w); while( !IsLast( P, G->Tablev.Header ) ); postv=postCounter; postCounter+;Vertex j;for (j=0;j<NumVertex;j+)/从每个节点出发进行DFS,因为图G有可能不是连通的if (visitedj=0) DFS(j);return post;(3) 求图G的强连通分量int *StrongConnectedComponent(DiGraph G)/求图G的强连通分量/DFS后序遍历图G,并将节点按后序遍历的顺序编号存入post数组int *post=P
6、ostDFS(G);/求图G的逆置GRDiGraph GR=ReverseGraph(G);/按post编号从大到小顺序在GR上执行DFS,所得连通分量就是原图G的强连通分量int NumVertex=GR->NumVertex;int visitedNumVertex;int i;for (i=0;i<NumVertex;i+)visitedi=0;/初始化,所有节点都未被访问过int *sccID = malloc( sizeof( int ) * NumVertex );/用于标记强连通分量的数组if( sccID = NULL ) FatalError( "Out
7、 of space!" );int sccCounter=0;/定义一个内嵌的DFS函数void DFS (Vertex v)/从节点v出发执行DFSvisitedv=1;/标记该节点被访问sccIDv=sccCounter;Position P = Header( GR->Tablev.Header );if( !IsEmpty( GR->Tablev.Header ) ) do/对节点v的所有邻接点递归调用DFS P = Advance( P ); Vertex w=Retrieve( P ); if (visitedw=0)/v的邻接点w未被访问过 DFS(w);
8、while( !IsLast( P, GR->Tablev.Header ) ); int m;for (m=NumVertex-1;m>=0;m-)/按post编号从大到小顺序在GR上执行DFS,因为图G有可能不是连通的Vertex n;for (n=0;n<NumVertex;n+)if (postn=m)/节点n的编号为当前最大值if (visitedn=0)DFS(n);sccCounter+;return sccID;(4) 测试函数main()DiGraph G=CreateGraph(10);/插入15条边,参见教科书P248,图9-74InsertEdge(G
9、,0,1);InsertEdge(G,0,3); InsertEdge(G,1,2);InsertEdge(G,1,5);InsertEdge(G,2,0);InsertEdge(G,2,3);InsertEdge(G,2,4);InsertEdge(G,3,4);InsertEdge(G,5,2);InsertEdge(G,6,5);InsertEdge(G,6,7);InsertEdge(G,7,5);InsertEdge(G,7,9);InsertEdge(G,8,7);InsertEdge(G,9,8);/插入15条边结束printf("输出图.n");OutputGraph(G);printf("n输出图的逆置.n");DiGraph GR=ReverseGraph(G);OutputGraph(GR);printf("n输出后序DFS编号.n");int *pp=PostDFS(G);int i;for (i=0;i<G->NumVertex;i+)printf("%d-",ppi);printf("nn输出强连通分量编号.n");int *scc=StrongConnectedComponen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仓库出入库管理规章制度
- 知识竞赛题目及答案科普
- AI在眼视光仪器技术中的应用
- 医共体消毒供应中心管理制度
- 新教材统编版七年级语文下册期末模拟卷
- 2026年安徽高考生物试卷试题真题及答案详解(精校打印)
- 通江县董家沟矿山建设项目(一期)水土保持报告表
- 人工智能通识导论(理论篇)课件 第4章-让机器看懂世界:计算机视觉
- 年产1000吨麻地膜生产线建设项目环境影响报告表
- 2026年出境评估申报流程
- 人教版高中地理选择性必修1第一章复习建构课课件
- 学校德育工作制度汇编
- 乳品评鉴师技能竞赛理论考试题库500题(含答案)
- 幼儿园膳食营养总结
- 2024中煤航测遥感集团限公司招聘58人易考易错模拟试题(共500题)试卷后附参考答案
- 高等数学(同济)下册期末考试题及答案(共5套)
- 2024年郑州高新投资控股集团有限公司招聘笔试冲刺题(带答案解析)
- 可吸收缝合线医疗器械项目可行性分析报告
- 做改革创新的生力军
- 有机物同分异构体
- 正摇双脚并脚跳绳教学设计
评论
0/150
提交评论