资源描述:
《7数据结构实验图答案》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验报告班级学号实骗室专业姓名计算机号实验名称实验7图的操作成绩评定所用软件VC或TC教师签名实验目的(1)掌握图的存储结构;(2)实现图的邻接矩阵存储。(3)掌握图的遍历方法。实验内容编写实现无向图的深度优先遍历算法,并上机调试运行#include#include#defineMaxVertexNum100〃最大顶点数,应由用户定义typedefcharVertexType;〃顶点类型应由用户定义typedefstructnode{〃边表结点intadjvex;〃邻接点域structnode*next;〃链域〃若要表示边上的权,则
2、应增加一个数据域JEdgeNode;typedefstructvnode{〃顶点表结点VertexTypevertex;〃顶点域EdgeNode*firstedge;〃边表头指针JVertexNode;typedefVertexNodeAdjList[MaxVertexNum];//AdjList是邻接表类型typedefstruct{AdjListadjlist;〃邻接表intn,e;〃图中当前顶点数和边数}ALGraph;〃对于简单的应用,无须定义此类型,可直接使用AdjList类型typedefenum{FALSE,TRUE}Boolean;//FALSE为0,T
3、RUE为1Booleanvisited[MaxVertexNum];〃访问标志向量是全局量voidDFS(ALGraph*G,inti);voidmain(){院(系):信息科学与技术学院课程名称:数据结构口期:voidCreateALGraph(ALGraph*G);voidPrintALGraph(ALGraph*G);voidDFSTraverse(ALGraph*G);ALGraphG;CreateALGraph(&G);PrintALGraph(&G);printfC*深度优先搜索结果:”);DFSTraverse(&G);printfC'Xn");voidC
4、reateALGraph(ALGraph*G){〃建立无向图的邻接表袅示inti,j,k;EdgeNode*s;printf(nW输出顶点数和边数:");scanf(n%d%dM,&G->n,&G->e);〃读入顶点数和边数printfC*请输出顶点信息:");for(i=0;in;i++){〃建立顶点表while((G->adjlist[i].vertex=getchar())==,');//读入顶点信息G->adjlist[i].firstedge=NULL;〃边表置为空表}for(k=0;ke;k+4-){〃建立边表printf("请输出第
5、%€1边的起点、终点:”,k+1);scanf(n%d%dH,&i,&j);〃读入边(vi,vj)的顶点对序号s=(EdgeNode*)malloc(sizeof(EdgeNode));〃生成边表结点s->adjvex=j;〃邻接点序号为js->next=G・>adjlist
6、i
7、.firstedge;G->adjlist[i].firstedge=s;〃将新结点*s插入顶点vi的边表头部s=(EdgeNode*)malloc(sizeof(EdgeNode));s->adjvex=i;〃邻接点序号为is->next=G・>adjlist
8、j
9、.firstedge;G-
10、>adjlist[j].firstedge=s;〃将新结点*s插入顶点vj的边表头部〃打印邻接表:voidPrintALGraph(ALGraph*G){inti;EdgeNode*p;for(i=0;in;i++){printf("%d%c:t",i,G->adjlist[i].vertex);p=G・>adjlist
11、ij.firstedge;while(p){printf("%dtH,p->adjvex);p=p->next;}printf(Hn);voidDFSTraverse(ALGraph*G){〃深度优先遍历以邻接表表示的图Ginti;〃标
12、志向量初始化//vi未访问过〃以vi为源点开始DFS搜索for(i=0;in;i++)visited[i]=FALSE;for(i=0;in;i++)if(!visited[i])DFS(Gi);voidDFS(ALGraph*G,inti){〃以Vi为出发点对邻接表表示的图G进行深度优先搜索EdgeNode*p;printf("%c",G->adjlist[i].vertex);〃访问顶点vivisited[i]=TRUE;〃标记vi已访问p=G->adjlist
13、i].firstedge;〃取vi边表的头指针while