图的邻接表存储实现及深度优先遍历Word下载.docx
《图的邻接表存储实现及深度优先遍历Word下载.docx》由会员分享,可在线阅读,更多相关《图的邻接表存储实现及深度优先遍历Word下载.docx(8页珍藏版)》请在冰豆网上搜索。
44
结点名称:
abcd
边:
a-ba-cb-cc-d
输出a-b-c-d-over!
第二组数据:
图如下:
输出
a-b-c-d-e-f-g-over!
4、概要设计
1、抽象数据类型,它们的作用
//图的结点类
template<
classT>
classTVex
{};
//图类
classGraph
{}//链表存储
2主程序流程及模块调用关系
(1)主程序模块:
voidmain
{
构造一个图,对T实例化(char)。
调用Graph中的Create函数;
调用Graph中的DFS函数;
}
(2)调用关系如下
2、核心算法的粗线条伪码
5、详细设计(要求主要变量和语句加注释)
1、抽象数据类型的实现:
包括类型定义和各个操作的实现。
1)TVex的详细设计
(1)私有数据类型的定义
private:
Tm_elem;
TLinklist<
int>
m_arcs;
2)Graph的详细设计
TVex<
T>
Vextex[maxnum];
intvexnum;
intarcnum;
intkind;
intsymbol[maxnum];
(2)公有函数成员的定义
Graph();
voidCreate();
intLocateVex(Tv);
voidDFS();
voidDFS_IN(inti);
(3)具体实现
★template<
voidGraph<
:
Create()
Tv1,v2;
inti,j;
cout<
<
"
*********************基本信息*****************************"
endl;
请分别输入结点数和边数:
"
;
cin>
>
vexnum>
arcnum;
***********************结点***************************"
for(intl=0;
l<
vexnum;
l++)
{
请输入第"
l+1<
个结点的代号"
Vextex[l].m_elem;
}
***********************边数***************************"
for(intk=0;
k<
k++)
cout<
k+1<
边的头结点和尾结点"
cin>
v1>
v2;
i=LocateVex(v1);
j=LocateVex(v2);
Vextex[i].m_arcs.InsertLate(j);
Vextex[j].m_arcs.InsertLate(i);
************************结果**************************"
★template<
intGraph<
LocateVex(Tv)
for(inti=0;
i<
vexnum&
&
Vextex[i].m_elem!
=v;
i++);
if(i==vexnum)
return-1;
else
returni;
DFS()
DFS_IN(0);
over!
DFS_IN(inti)
intindex;
symbol[i]=1;
Vextex[i].m_elem<
-->
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<
char>
h;
int*ww,n;
char*cc;
cout<
请输入叶子节点的个数:
cin>
n;
ww=newint[n];
cc=newchar[n];
请依次输入节点名称和权重:
for(inti=1;
=n;
i++)
第"
个"
名称:
cc[i-1];
权重:
ww[i-1];
h.CreatehuffmanTree(cc,ww,n);
h.huffmanTreecoding();
四.调试分析
1、设计与调试过程中遇到的问题及分析、体会
(1)这个实验较简单,经过对书本上已经给出的c版程序的分析,很容易就写出了对整个实验的大体思路。
(2)这个程序不难,但前提是Tlinklist已经做得做够全面,在这个实验中发现了Tlinklist的很多不足,经过改进,才使得程序简单明了,如在其中增加了获取长度,获取数据,在链表麽增加数据几个函数,解决很多问题。
(3)该程序还有很大的可提升空间,比如用动态分配内存的方法实现结点的存储。
(4)从该程序中也学到很多,比如说对递归的熟练掌握;
对判断条件的分析等。
6、测试结果
列出几组输入和输出结果,输入集应多于需求分析的数据。