用邻接表遍历图实验报告Word下载.docx

上传人:b****7 文档编号:21868830 上传时间:2023-02-01 格式:DOCX 页数:9 大小:286.56KB
下载 相关 举报
用邻接表遍历图实验报告Word下载.docx_第1页
第1页 / 共9页
用邻接表遍历图实验报告Word下载.docx_第2页
第2页 / 共9页
用邻接表遍历图实验报告Word下载.docx_第3页
第3页 / 共9页
用邻接表遍历图实验报告Word下载.docx_第4页
第4页 / 共9页
用邻接表遍历图实验报告Word下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

用邻接表遍历图实验报告Word下载.docx

《用邻接表遍历图实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《用邻接表遍历图实验报告Word下载.docx(9页珍藏版)》请在冰豆网上搜索。

用邻接表遍历图实验报告Word下载.docx

12

实验题目:

用邻接表遍历图

1、实验目的:

1.掌握图的逻辑结构

2.掌握图的邻接表存储结构

3.验证图的邻接表存储及其深度和广度优先遍历操作的实现

2、实验内容:

1.建立一个有向图的邻接表存储结构

2.对建立的有向图,进行深度优先遍历

3.对建立的有向图,进行广度优先遍历

3、设计与编码

1.本实验用到的理论知识

1 边表结点与顶点表结点的建立(类似单链表中的结点);

2 队列的特点:

只能在一端插入,另一端删除;

2.算法设计

关键算法与分析

1 边表结点与顶点表结点的建立

2 建立一个有n个顶点e条边的有向图

3 有向图的深度优先遍历

4 有向图的广度优先遍历

5 求某个顶点的度

4、运行与测试

正确的运行结果

5、总结与心得

运用邻接表来实现有向图的深度和广度优先遍历,在建立邻接表的时候,我发现运用结点能够更好地表示点与点之间的关系,在邻接表中,我们运用了顶点表结点和边表结点。

无论是以前学习的单链表,双链表,树,二叉树,里面的点都是运用结点来实现数据之间的关系

6、附录(程序完整代码)

ALGraph.h

#ifndefALGraph_H 

//定义头文件

#defineALGraph_H

constintMaxSize=10;

//图的最大顶点数

structArcNode 

//定义边表结点

{

intadjvex;

//存放该顶点的邻接结点在顶点表中的下标

ArcNode*next;

//该顶点的其他邻接结点(边表结构)-指向边表中的下一个结点

};

template<

classDataType>

structVertexNode 

//定义顶点表结点

DataTypevertex;

//存放顶点信息

ArcNode*firstedge;

//存放顶点的第一个邻接结点(边表结构)

classALGraph

public:

ALGraph(DataTypea[],intn,inte);

//构造函数,建立一个有n个顶点e条边的图

~ALGraph();

//析构函数,释放邻接表中各边表结点的存储空间

voidDFSTraverse(intv);

//深度优先遍历图

voidBFSTraverse(intv);

//广度优先遍历图

intDu(intx);

//求第x个顶点的度

private:

VertexNode<

DataType>

adjlist[MaxSize];

//存放顶点表的数组

intvertexNum,arcNum;

//图的顶点数和边数

#endif

ALGraph.cpp

#include<

iostream>

usingnamespacestd;

#include"

ALGraph.h"

//引入头文件

ALGraph<

:

ALGraph(DataTypea[],intn,inte)

ArcNode*s;

inti,j,k;

vertexNum=n;

arcNum=e;

for(i=0;

i<

vertexNum;

i++) 

//输入顶点信息,初始化顶点表

{

adjlist[i].vertex=a[i];

adjlist[i].firstedge=NULL;

}

for(k=0;

k<

arcNum;

k++) 

//依次输入每一条边

cout<

<

"

请输入边的两个顶点的序号:

;

cin>

>

i>

j;

//输入边所依附的两个顶点的编号

s=newArcNode;

s->

adjvex=j;

//生成一个边表结点s

s->

next=adjlist[i].firstedge;

//将结点s插入到第i个边表的表头

adjlist[i].firstedge=s;

~ALGraph()

ArcNode*p;

for(inti=0;

i<

vertexNum;

i++)

p=adjlist[i].firstedge;

while(p!

=NULL) 

//循环删除

adjlist[i].firstedge=p->

next;

deletep;

//释放结点空间

voidALGraph<

DFSTraverse(intv)

intj;

adjlist[v].vertex;

visited[v]=1;

p=adjlist[v].firstedge;

//工作指针p指向顶点v的边表

while(p!

=NULL) 

//依次搜索顶点v的邻接点j

j=p->

adjvex;

if(visited[j]==0)

DFSTraverse(j);

p=p->

}

BFSTraverse(intv)

intfront=-1,rear=-1;

//初始化队列,假设队列采用顺序存储且不会发生溢出

intQ[MaxSize];

visited[v]=1;

Q[++rear]=v;

//被访问顶点入队

while(front!

=rear) 

//当队列非空时

v=Q[++front];

//工作指针p指向顶点v的边表

=NULL)

intj=p->

if(visited[j]==0)

adjlist[j].vertex;

visited[j]=1;

Q[++rear]=j;

p=p->

template<

intALGraph<

Du(intx)//求第x个顶点的度

intcount=0;

p=adjlist[x].firstedge;

=NULL)

count++;

returncount;

ALGraphmain.cpp

ALGraph.cpp"

intvisited[MaxSize]={0};

voidmain()

charch[]={'

A'

'

B'

C'

D'

E'

inti;

char>

ALG(ch,5,6);

MaxSize;

visited[i]=0;

深度优先遍历序列是:

ALG.DFSTraverse(0);

endl;

广度优先遍历序列是:

ALG.BFSTraverse(0);

请输入你想要知道度的顶点的序号"

intx;

cin>

x;

第"

x<

个顶点的度为"

ALG.Du(x)<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1