版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、上机实验报告实验七、图算法上机实现一、实验目的:1 .了解熟知图的定义和图的根本术语,掌握图的几种存储结构.2 .掌握邻接矩阵和邻接表定义及特点,并通过实例解析掌握邻接矩阵和邻接表的类型定义.3 .掌握图的遍历的定义、复杂性分析及应用,并掌握图的遍历方法及其根本思想.二、实验内容:1 .建立无向图的邻接矩阵2 .图的深度优先搜索3 .图的广度优先搜索三、实验步骤及结果:1.建立无向图的邻接矩阵:1源代码:#include"stdio.h"#include"stdlib.h"#defineMAXSIZE30typedefstructcharvertexMA
2、XSIZE;/顶点为字符型且顶点表的长度小于MAXSIZEintedgesMAXSIZEMAXSIZE;/边为整形且edges为邻近矩阵MGraph;/MGraph为采用邻近矩阵存储的图类型voidCreatMGraph(MGraph*g,inte,intn)/建立无向图白邻近矩阵g->egdes,n为顶点个数,e为边数inti,j,k;printf("Inputdataofvertexs(0n-1):n");for(i=0;i<n;i+)g->vertexi=i;/读入顶点信息for(i=0;i<n;i+)for(j=0;j<n;j+)g-&
3、gt;edgesij=0;/初始化邻接矩阵for(k=1;k<=e;k+)/输入e条边printf("Inputedgesof(i,j):");scanf("%d,%d",&i,&j);g->edgesij=1;g->edgesji=1;)voidmain()(inti,j,n,e;MGraph*g;/建立指向采用邻接矩阵存储图类型指针g=(MGraph*)malloc(sizeof(MGraph);/生成采用邻接举证存储图类型的存储空间printf("InputsizeofMGraph:");/输入
4、邻接矩阵的大小scanf("%d",&n);printf("Inputnumberofedge:");/输入邻接矩阵的边数scanf("%d",&e);CreatMGraph(g,e,n);/生成存储图的邻接矩阵printf("OutputMGraph:n");/输出存储图的邻接矩阵for(i=0;i<n;i+)(for(j=0;j<n;j+)printf("%4d",g->edgesij);printf("n");)2)运行结果:Inpur
5、sizeofHGi*aph=4Inputnuinjjepofe-4Inputdataofuei*texsCSn1>:Input:edgfesInputedgesInput;elitesInputedQfesof<i,j5他:Lof<i,j>:0,3of<i,j>=1.3o£<i,j>=1,2OutputHGi*dph-0101101101001130Py-essanvlieytocontinue2.图的深度优先搜索:1源代码:#include"stdio.h"#include"stdlib.h"#
6、defineMAXSIZE30typedefstructnode/邻接表结点intadjvex;/邻接点域structnode*next;指向下一个邻接边结点的指针域EdgeNode;/邻接表结点类型typedefstructvnode/顶点表结点intvertex;/顶点域EdgeNode*firstedge;指向邻接表第一个邻接边节点的指针VertexNode;/顶点表结点类型voidCreatAdjlist(VertexNodeg,inte,intn)/建立无向图白邻接表,n为顶点数,e为边数,g口存储n个顶点表结点EdgeNode*p;inti,j,k;printf("Inp
7、utdataofvetex(0n-1);n");for(i=0;i<n;i+)/建立有n个顶点的顶点表gi.vertex=i;/读入顶点i信息gi.firstedge=NULL;/初始化指向顶点i的邻接表表头指针for(k=1;k<=e;k+)/输入e条边printf("Inputedgeof(i,j):");scanf("%d,%d",&i,&j);p=(EdgeNode*)malloc(sizeof(EdgeNode);p->adjvex=j;/在顶电vi的邻接表中添加邻接点为j的结点p->next=
8、gi.firstedge;/插入是在邻接表表头进行的gi.firstedge=p;p=(EdgeNode*)malloc(sizeof(EdgeNode);p->adjvex=i;/在顶电vj的邻接表中添加邻接点为i的结点p->next=gj.firstedge;/插入是在邻接表表头进行的gj.firstedge=p;)intvisitedMAXSIZE;/MAXSIZE为大于或等于无向图顶点个数的常量voidDFS(VertexNodeg,inti)EdgeNode*p;printf("%4d",gi.vertex);输出顶点i信息,即访问顶点ivisited
9、i=1;p=gi.firstedge;/根据顶点i的指针firstedge查找其邻接表的第一个邻接边结点while(p!=NULL)if(!visitedp->adjvex)/如果邻接的这个边结点未被访问过DFS(g,p->adjvex);/对这个边结点进行深度优先搜索p=p->next;/查找顶点i的下一个邻接边结点)voidDFSTraverse(VertexNodeg,intn)深度优先搜索遍历以邻接表存储的图,其中g为顶点数,n为顶点个数inti;for(i=0;i<n;i+)visitedi=0;/访问标志置0for(i=0;i<n;i+)/对n个顶点的
10、图查找未访问过的顶点并由该顶点开始遍历if(!visitedi)/当visitedi等于0时即顶点i未访问过DFS(g,i);/从未访问过的顶点i开始遍历voidmain()inte,n;VertexNodegMAXSIZE;定义顶点表结点类型数组gprintf("Inputnumberofnode:n");/输入图中节点个数边的个数scanf("%d",&n);printf("Inputnumberofedge:n");/输入图中边的个数scanf("%d",&e);printf("Ma
11、keadjlist:n");CreatAdjlist(g,e,n);/建立无向图的邻接表printf("DFSTraverse:n");DFSTraverse(g,n);/徐度优先遍历以邻接表存储的无向图printf("n");)2)运行结果:r1-1斓施阖跳实惹内容152Debugl52-exe"rnputnumberofnode:Inputnumbero£eds(e-4MaHeadjlist:Inputdataofvetex<0""n-l);Inputedgeofj>:0,1Inputed
12、geofti,:6,3Inputedgeof:1,3InputedgeofCi,J):1,2DFSTpauepse;0312Pi'assanyIteytocontinue3.图的广度优先搜索:1)源代码:#include"stdio.h"#include"stdlib.h"#defineMAXSIZE30typedefstructnode1/邻接表结点intadjvex;/邻接点域structnode1*next;/指向下一个邻接边结点的指针域EdgeNode;/邻接表结点类型typedefstructvnode/顶点表结点intvertex;/
13、顶点域EdgeNode*firstedge;指向邻接表第一个邻接边结点的指针域VertexNode;/顶点表结点类型voidCreatAdjlist(VertexNodeg,inte,intn)建立无向图的邻接表,n为顶点数,e为边数,g口存储n个顶点表结点EdgeNode*p;inti,j,k;printf("Inputdataofvetex(0n-1):n");for(i=0;i<n;i+)/建立有n个顶点的顶点表gi.vertex=i;/读入顶点i信息gi.firstedge=NULL;/初始化指向顶点i的邻接表表头指针for(k=1;k<=e;k+)/输
14、入e条边printf("Inputedgeof(i,j):");scanf("%d,%d",&i,&j);p=(EdgeNode*)malloc(sizeof(EdgeNode);p->adjvex=j;/在定点vi的邻接表中添加邻接点为j的结点p->next=gi.firstedge;/插入是在邻接表表头进行的gi.firstedge=p;p=(EdgeNode*)malloc(sizeof(EdgeNode);p->adjvex=i;/在顶电vj的邻接表中添加邻接点为i的结点p->next=gj.firsted
15、ge;/插入是在邻接表表头进行的gj.firstedge=p;typedefstructnodeintdata;structnode*next;QNode;/链队列结点的类型typedefstructQNode*front,*rear;/将头、尾指针纳入到一个结构体的链队列LQueue;/链队列类型voidInit_LQueue(LQueue*q)/创立一个带头结点的空队列QNode*p;*q=(LQueue*)malloc(sizeof(LQueue);/申请带头、尾指针的链队列p=(QNode*)malloc(sizeof(QNode);/申请链队列的头结点p->next=NULL;
16、/头结点的next指针置为空(*q)->front=p;/队头指针指向头结点(*q)->rear=p;/队尾指针指向头结点intEmpty_LQueue(LQueue*q)/判队空if(q->front=q->rear)/队为空return1;elsereturn0;voidIn_LQueue(LQueue*q,intx)/入队QNode*p;p=(QNode*)malloc(sizeof(QNode);/申请新链队列结点p->data=x;p->next=NULL;/新结点作为队尾结点时其next域为空q->rear->next=p;/将新结点
17、*p链到原队尾结点之后q->rear=p;/使队尾指针指向新的队尾结点*pvoidOut_LQueue(LQueue*q,int*x)/出队QNode*p;if(Empty_LQueue(q)printf("Queueisempty!n");/对空,出队失败else(p=q->front->next;指针p指向链队列第一个数据结点(即对头结点)q->front->next=p->next;头结点的next指针指向链队列第二个数据结点(即删除第一个数据结点)*x=p->data;/将删除的对头结点数据经由x返回free(p);if(q
18、->front->next=NULL)/出队后队为空,那么置为空队列q->rear=q->front;intvisitedMAXSIZE;/MAXSIZE为大于或等于无向图顶点个数的常量voidBFS(VertexNodeg,LQueue*Q,inti)/广度优先搜索遍历邻接表存储的图,g为顶点表,Q为队指针,i为第i个顶点intj,*x=&j;EdgeNode*p;printf("%4d",gi.vertex);输出顶点i信息,即访问顶点ivisitedi=1;/置顶点i为访问过标志In_LQueue(Q,i);/顶点i入队Qwhile(!
19、Empty_LQueue(Q)当队Q非空时Out_LQueue(Q,x);对头顶点出队并送j(暂记为顶点j)p=gj.firstedge;/根据顶点j的表头指针查找其邻接表的第一个邻接边结点while(p!=NULL)if(!visitedp->adjvex)/如果邻接的这个边结点未被访问过printf("%4d",gp->adjvex.vertex);/输出这个邻接边结点的顶点信息visitedp->adjvex=1;/置该邻接边结点为访问过标志In_LQueue(Q,p->adjvex);将该邻接边结点送人队Qp=p->next;/在顶电j的邻接表中查找j的下一个邻接边结点)voidmain()(inte,n;VertexNodegMAXSIZE;/定义顶点表结点类型数组gLQueue*q;printf("Inputnumberofnode:n"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学研学活动方案6篇
- 工程造价咨询服务合同范本9篇
- 学校矛盾纠纷排查工作情况汇报三篇
- 中国小动物技能大赛骨科专赛理论考试题库(含答案)
- 《反电信网络诈骗法》知识考试题库150题(含答案)
- 大拇指腱鞘炎偏方课件
- 2025年河北女子职业技术学院高职单招语文2018-2024历年参考题库频考点含答案解析
- 2025年江西现代职业技术学院高职单招高职单招英语2016-2024历年频考点试题含答案解析
- 2025年江西冶金职业技术学院高职单招语文2018-2024历年参考题库频考点含答案解析
- 2025年武汉职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025年度新能源汽车充电站运营权转让合同样本4篇
- 第5课 隋唐时期的民族交往与交融 课件(23张) 2024-2025学年统编版七年级历史下册
- 2024年全国职业院校技能大赛高职组(生产事故应急救援赛项)考试题库(含答案)
- 老年上消化道出血急诊诊疗专家共识2024
- 广东省广州黄埔区2023-2024学年八年级上学期期末物理试卷(含答案)
- 学校安全工作计划及行事历
- 《GMP基础知识培训》课件
- 数学家华罗庚课件
- 贵州茅台酒股份有限公司招聘笔试题库2024
- 《纳米技术简介》课件
- 血液透析高钾血症的护理查房
评论
0/150
提交评论