实验四 图的构造与遍历
l 实验目的
1、图的的定义和遍历
(1)掌握图的邻接矩阵、邻接表的表示方法。
(2)掌握建立图的邻接矩阵的算法。
(3)掌握建立图的邻接表的算法。
(4)加深对图的理解,逐步培养解决实际问题的能力。
l 实验内容
1、图的定义和遍历
(一)基础题
1、编写图基本操作函数:
(1)CreateALGraph(ALGraph &G) 建立无向图的邻接表表示;
(2)LocateVex(ALGraph &G,char v)图查找信息;
(3)DFSTraverse(ALGraph &G)图的深度遍历操作
(4)BFSTraverse(ALGraph &G)图的广度优先遍历
(5)Create(MGraph &G)邻接矩阵的创建
2、调用上述函数实现下列操作:
(1)建立一个图的邻接矩阵和图的邻接表;
(2)采用递归深度优先遍历输出图的邻接矩阵;
(3)采用递归深度优先输出图的邻接表;
(4)采用图的广度优先遍历输出图的邻接表;
(5)采用图的广度优先遍历输出图的邻接表。
(二)提高题-
【问题描述】设某城市有n个车站,并有m条公交线路连接这些车站。假设这些公交车站都是单向的,这n个车站被顺序编号为0~n-1。在本程序中输入该城市的公交线路数,车站个数以及各公交线路上各站的编号。
【实现要求】求得从站0出发乘公交车至站n-1的最少换车次数。
l 实验结果
1、图的定义和遍历
(一)基础题
(1)画出数据结构基本运算的流程图
(2)程序运行主要结果截图
(3)程序源代码
#include<stdio.h> #include<stdlib.h> typedef struct ArcNode { int adjvex; //邻接点域 struct ArcNode *nextarc; //指向下一个邻接点的指针域 int weight; }ArcNode;//边结点 typedef struct VNode { char vertex; //顶点域 ArcNode *firstarc;//第一条边的指针 }VNode,AdjList[10];//顶点结点向量 typedef struct { AdjList adjlist; int vexnum,arcnum; }ALGraph; //图的邻接矩阵 typedef struct { int adj; }AdjMatrix[10][10]; typedef struct { int vexs[10]; AdjMatrix arcs; int vexnum,arcnum; }MGraph; int LocateVex(ALGraph &G,char v)//查找顶点信息 { int k,j=0; for(k=0;k<G.vexnum;k++) if(G.adjlist[k].vertex==v) { j=k; break; } return j; } void CreateALGraph(ALGraph &G) { //建立无向图的邻接表表示 int i,j,k,w; char v1,v2; ArcNode *s; printf("请输入顶点数和边数(vexnum,arcnum):"); scanf("%d,%d",&G.vexnum,&G.arcnum); for(i=0;i<G.vexnum;i++) { //建立顶点表 getchar(); printf("请输入第%d顶点信息:",i+1); scanf("%c",&G.adjlist[i].vertex);//读入顶点信息 G.adjlist[i].firstarc=NULL;//边表置为空表 } for(k=0;k<G.arcnum;k++) { //建立边表 getchar(); printf("请输入第%d边的顶点对序号和边的权值(v1,v2,w):",k+1); scanf("%c,%c,%d",&v1,&v2,&w); j=LocateVex(G,v2); i=LocateVex(G,v1); s=(ArcNode*)malloc

本次实验旨在掌握图的邻接矩阵和邻接表表示,包括图的基本操作函数实现,如深度优先遍历(DFS)和广度优先遍历(BFS)。实验内容包括创建无向图的邻接表,进行图的查找,以及解决实际问题,如求从站0到站n-1的最少换车次数。实验结果展示了程序的流程图、运行截图及源代码。

1万+

被折叠的 条评论
为什么被折叠?



