欢迎来到天天文库
浏览记录
ID:15527469
大小:92.00 KB
页数:7页
时间:2018-08-03
《图的邻接存储结构及其遍历和拓扑排序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一、需求分析:(1)本程序利用邻接表存入一个图,并将其使用广度和深度遍历,并将其使用拓扑排序输出来。(2)本程序的目的在于了解图的存储结构,以及其遍历的方法和拓扑排序的应用。(3)测试数据请参见测试结果那里。二、概要设计:(1)数据类型:ADTgraphcs{intvex;//结点的号码intnext;//该结点所连接的下一个结点}(2)基本操作:classgraphics{create(inti,intj)初始条件:存在邻接数组操作结果:将结点i和结点j相连接,从而形成邻接表graphics()操作结果:初始化各个数据init()操作结果:做完深度遍历后重新初始化所需要的数据findfre
2、e()操作结果:存在顶点数组,找到未用结点的下标并返回start(inti)操作结果:启用结点,创建邻接数组dfs(inti,intn)初始条件:图已经创建。操作结果:对图进行广度优先遍历bfs(inti,intn)初始条件:图已经创建。操作结果:对图进行深度优先遍历toposort(intn)初始条件:有向图已经建立操作结果:输出拓扑排序的顺序}(3)主函数main(){声明类对象,调用各个函数。}(4)调用关系:类graphicscreate()main()start()toposort()bfs(),dsf()第7页共7页三、详细设计:#includestruc
3、tgraphics{//声明所需的私有数据intvex[50];//用于存入顶点的号码intnext[50];//用于存入指示字boolvisited[50];//表示该结点是否被访问intfront,rear;//队列的头尾指针intqueue[50];//队列,队列足够大所以不必判断它是否满intin[50];//统计每个结点的入度public://公有函数graphics()//构造函数,用于初始化数据{for(inti=0;i<50;i++){vex[i]=next[i]=-1;//-1代表空,没有使用过in[i]=0;//先初始化为0visited[i]=false;//false
4、表示没有访问过}}voidinit()//做完深度遍历后,重新初始化数据{front=-1;rear=-1;for(inti=0;i<50;i++){visited[i]=false;queue[i]=-1;}}intfindfree()//找到可用的结点{inti=0;while(vex[i]!=-1)i++;returni;}voidstart(inti)//启用结点,创建邻接数组{vex[i]=i;}voidcreate(inti,intj)//构造邻接表第7页共7页{intk=findfree();//找到可用结点vex[k]=j;//记录结点号码intp=i;while(next[
5、p]!=-1)//寻找链尾指针p=next[p];next[p]=k;//存入指示字}voiddfs(inti,intn)//深度优先法遍历{if(!visited[i])//判断有没被访问过cout<
6、问rear++;//入队queue[rear]=i;while(front!=rear){front++;//出队intk=queue[front];intp=next[k];while(p!=-1)//访问所连接的结点{intj=vex[p];if(!visited[j]){cout<7、指针的功能)for(i=0;i
7、指针的功能)for(i=0;i
此文档下载收益归作者所有