图的邻接表存储实现及深度优先遍历.docx
- 文档编号:3915900
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:8
- 大小:95.41KB
图的邻接表存储实现及深度优先遍历.docx
《图的邻接表存储实现及深度优先遍历.docx》由会员分享,可在线阅读,更多相关《图的邻接表存储实现及深度优先遍历.docx(8页珍藏版)》请在冰豆网上搜索。
图的邻接表存储实现及深度优先遍历
第四次实验报告
图的邻接表存储实现及深度优先遍历
学号0708140119电子072姓名陆萍萍
一、问题描述
1、程序所能达到的基本功能
构建以邻接表形式存储的表及实现深度优先遍历并输出结果。
2、输入的形式和输入值的范围:
根据提示进行输入:
先输入要构建的表的结点数和边数,要求是整型;
输入各结点的代号,这里用char型,也可在源程序中改变其它形式;
输入各边的头结点和尾结点的代号;
3、输出的形式
若正常输入,则输出深度优先遍历的最后结果。
用各结点的代码表示。
测试数据要求
第一组数据:
结点数和边数:
44
结点名称:
abcd
边:
a-ba-cb-cc-d
输出a-b-c-d-over!
第二组数据:
图如下:
输出
a-b-c-d-e-f-g-over!
4、概要设计
1、抽象数据类型,它们的作用
//图的结点类
template
classTVex
{};
//图类
template
classGraph
{}//链表存储
2主程序流程及模块调用关系
(1)主程序模块:
voidmain
{
构造一个图,对T实例化(char)。
调用Graph中的Create函数;
调用Graph中的DFS函数;
}
(2)调用关系如下
2、核心算法的粗线条伪码
5、详细设计(要求主要变量和语句加注释)
1、抽象数据类型的实现:
包括类型定义和各个操作的实现。
1)TVex的详细设计
(1)私有数据类型的定义
private:
Tm_elem;
TLinklist
2)Graph的详细设计
(1)私有数据类型的定义
private:
TVex
intvexnum;
intarcnum;
intkind;
intsymbol[maxnum];
(2)公有函数成员的定义
Graph();
voidCreate();
intLocateVex(Tv);
voidDFS();
voidDFS_IN(inti);
(3)具体实现
★template
voidGraph
:
Create()
{
Tv1,v2;
inti,j;
cout<<"*********************基本信息*****************************"< cout<<"请分别输入结点数和边数: "; cin>>vexnum>>arcnum; cout<<"***********************结点***************************"< for(intl=0;l { cout<<"请输入第"< cin>>Vextex[l].m_elem; } cout<<"***********************边数***************************"< for(intk=0;k { cout<<"请输入第"< cin>>v1>>v2; i=LocateVex(v1); j=LocateVex(v2); Vextex[i].m_arcs.InsertLate(j); Vextex[j].m_arcs.InsertLate(i); } cout<<"************************结果**************************"< } ★template intGraph : LocateVex(Tv) { for(inti=0;i =v;i++); if(i==vexnum) return-1; else returni; } ★template voidGraph : DFS() { DFS_IN(0); cout<<"over! "< } ★template voidGraph : DFS_IN(inti) { intindex; symbol[i]=1; cout< for(intj=0;;j++) { index=Vextex[i].m_arcs.GetElem(j+1); if(index! =-1) { if(symbol[index]! =1) DFS_IN(index); } else break; } } 2、其他主要算法的实现 将次要算法均设为Graph的公有函数成员 3、主程序的实现 Voidmain() { huffmanTree int*ww,n; char*cc; cout<<"请输入叶子节点的个数: ";cin>>n; ww=newint[n]; cc=newchar[n]; cout<<"请依次输入节点名称和权重: "< for(inti=1;i<=n;i++) { cout<<"第"< cout<<"名称: ";cin>>cc[i-1]; cout<<"权重: ";cin>>ww[i-1]; } h.CreatehuffmanTree(cc,ww,n); h.huffmanTreecoding(); } 四.调试分析 1、设计与调试过程中遇到的问题及分析、体会 (1)这个实验较简单,经过对书本上已经给出的c版程序的分析,很容易就写出了对整个实验的大体思路。 (2)这个程序不难,但前提是Tlinklist已经做得做够全面,在这个实验中发现了Tlinklist的很多不足,经过改进,才使得程序简单明了,如在其中增加了获取长度,获取数据,在链表麽增加数据几个函数,解决很多问题。 (3)该程序还有很大的可提升空间,比如用动态分配内存的方法实现结点的存储。 (4)从该程序中也学到很多,比如说对递归的熟练掌握;对判断条件的分析等。 6、测试结果 列出几组输入和输出结果,输入集应多于需求分析的数据。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 邻接 存储 实现 深度 优先 遍历
![提示](https://static.bdocx.com/images/bang_tan.gif)