收藏 分销(赏)

数据结构实验报告-图的遍历.doc

上传人:1587****927 文档编号:1648857 上传时间:2024-05-07 格式:DOC 页数:4 大小:63KB 下载积分:5 金币
下载 相关 举报
数据结构实验报告-图的遍历.doc_第1页
第1页 / 共4页
数据结构实验报告-图的遍历.doc_第2页
第2页 / 共4页


点击查看更多>>
资源描述
数 据 结 构实 验 报 告 实验:图的遍历 一、实验目的: 1、理解并掌握图的逻辑结构和物理结构——邻接矩阵、邻接表 2、掌握图的构造方法 3、掌握图的邻接矩阵、邻接表存储方式下基本操作的实现算法 4、掌握图的深度优先遍历和广度优先原理 二、实验内容: 1、输入顶点数、边数、每个顶点的值以及每一条边的信息,构造一个无向图G,并用邻接矩阵存储改图。 2、输入顶点数、边数、每个顶点的值以及每一条边的信息,构造一个无向图G,并用邻接表存储该图 3、深度优先遍历第一步中构造的图G,输出得到的节点序列 4、广度优先遍历第一部中构造的图G,输出得到的节点序列 三、实验要求: 1、无向图中的相关信息要从终端以正确的方式输入; 2、具体的输入和输出格式不限; 3、算法要具有较好的健壮性,对错误操作要做适当处理; 4、程序算法作简短的文字注释。 四、程序实现及结果: 1、邻接矩阵: #include <stdio.h> #include <malloc.h> #define VERTEX_MAX 30 #define MAXSIZE 20 typedef struct { int arcs[VERTEX_MAX][VERTEX_MAX]; int vexnum,arcnum; } MGraph; void creat_MGraph1(MGraph *g) { int i,j,k; int n,m; printf("请输入顶点数和边数:"); scanf("%d%d",&n,&m); g->vexnum=n; g->arcnum=m; for (i=0;i<n;i++) for (j=0;j<n;j++) g->arcs[i][j]=0; while(1) { printf("请输入一条边的两个顶点:\n"); scanf("%d%d",&i,&j); if(i==-1 || j==-1) break; else if(i==j || i>=n || j>=n) { printf("输入错误,请重新输入!\n"); } else { g->arcs[i][j]=1; g->arcs[j][i]=1; } } } void printMG(MGraph *g) { int i,j; for (i=0;i<g->vexnum;i++) {for (j=0;j<g->vexnum;j++) printf(" %d",g->arcs[i][j]); printf("\n"); } printf("\n"); } main() { int i,j; int fg; MGraph *g1; g1=(MGraph *)malloc(sizeof(MGraph)); printf("1:创建无向图的邻接矩阵\n\n"); creat_MGraph1(g1); printf("\n此图的邻接矩阵为:\n"); printMG(g1); } 2、邻接链表: #include<stdio.h> #include<malloc.h> #define MAX_SIZE 10 typedef struct node{ int vertex; struct node *next; }node,adjlist[MAX_SIZE]; adjlist g; int visited[MAX_SIZE+1]; int que[MAX_SIZE+1]; void creat() { int n,e; int i; int start,end; node *p,*q,*pp,*; printf("输入无向图的顶点数和边数:"); scanf("%d%d",&n,&e); for(i = 1; i <= n ; i++) { visited[i] = 0; g[i].vertex = i; g[i].next = NULL; } printf("依次输入边:\n"); for(i = 1; i <= e ; i++) { scanf("%d%d",&start,&end); p=(node *)malloc(sizeof(node)); p->vertex = end; p->next = NULL; q = &g[start]; while(q->next) q = q->next; q->next = p; p1=(node *)malloc(sizeof(node)); p1->vertex = start; p1->next = NULL; q1 = &g[end]; while(->next) q1 = q1->next; q1->next = p1; } } void bfs(int vi) { int front,rear,v; node *p; front =0; rear = 1; visited[vi] = 1; que[0] = vi; printf("%d ",vi); while(front != rear) { v = que[front]; p = g[v].next; while(p) { if(!visited[p->vertex]) { visited[p->vertex]= 1; printf("%d ",p->vertex); que[rear++] = p->vertex; } p = p->next; } front++; } } int main() { creat(); bfs(1); printf("\n"); return 0; } 五.实验心得与体会: (1)通过这次实验,使我基本上掌握了图的存储和遍历,让我弄清楚了如何用邻接矩阵和邻接链表对图进行存储 (2)深度优先遍历和广度优先遍历都有着各自的优点,通过程序逐步调试,可以慢慢的理解这两种遍历方法的内涵和巧妙之处。 (3)实验过程中,总体来说还算顺畅,但在编写过程中,要养成良好的编程习惯,以免出错后浪费大量的时间在查错上。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服