图邻接矩阵 邻接表的建立c_数据结构课程设计.doc

上传人:s9****2 文档编号:548505399 上传时间:2023-02-13 格式:DOC 页数:9 大小:45.50KB
返回 下载 相关 举报
图邻接矩阵 邻接表的建立c_数据结构课程设计.doc_第1页
第1页 / 共9页
图邻接矩阵 邻接表的建立c_数据结构课程设计.doc_第2页
第2页 / 共9页
图邻接矩阵 邻接表的建立c_数据结构课程设计.doc_第3页
第3页 / 共9页
图邻接矩阵 邻接表的建立c_数据结构课程设计.doc_第4页
第4页 / 共9页
图邻接矩阵 邻接表的建立c_数据结构课程设计.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《图邻接矩阵 邻接表的建立c_数据结构课程设计.doc》由会员分享,可在线阅读,更多相关《图邻接矩阵 邻接表的建立c_数据结构课程设计.doc(9页珍藏版)》请在金锄头文库上搜索。

1、一.需求分析1.运行环境硬件:计算机486/64M以上操作系统: WIN9x 以上/WIN2000/WIN XP/WIN ME 相关软件:vistualC+2程序所实现的功能: (1)建立并显示图的邻接表。 (2)深度优先遍历,显示遍历结果。 (3)对该图进行拓扑排序,显示排序结果。 (4)给出某一确定顶点到所有其它顶点的最短路径。3.程序的输入,包含输入的数据格式和说明(1)输入顶点数,及各顶点信息(数据格式为整形)(2)输入边数,及权值(数据格式为整形)4.程序的输出,程序输出的形式(1)输出图的邻接表、深度优先遍历结果、拓扑排序结果。(2)输入某一确定顶点到其它所有顶点的最短路径。5.测

2、试数据二、设计说明1、 算法设计的思想建立图类,建立相关成员函数。最后在主函数中实现。具体成员函数的实现请参看源程序。 2、 主要的数据结构设计说明图邻接矩阵、邻接表的建立。图的深度优先遍历、拓扑排序、顶点之间的最短路径。3、 程序的主要模板template class Graph4、 程序的主要函数 Graph、link()、DFTraverse()、TopologicalOrder()、TopologicalOrder()、GetVertexPos()、ShortestPath三、上机结果及体会1、 实际完成的情况说明主要程序参考教材数据结构C+版。2、 程序的性能分析可连续建图 3、 上

3、机过程中出现的问题及其解决方案。编译没有错误,但结果有问题。解决方案:虽然程序的编译通过,只能说明语法上没有问题,结果只所以不正确是因为算法上原因。4、 程序中可以改进的地方说明程序中的深度优先遍历,浪费空间较大,可以考虑用循环来做。但这样将付出代码长度度加长的代价。5、 程序中可以扩充的功能及设计实现假想实现假想:随用户的输入可以随时动态的显示图的生成。6、 收获及体会编写程序即是一件艰苦的工作,又是一件愉快的事情。最大的收获:编程时如果遇到看似简单但又无法解决的问题,很容易灰心丧气。此时切不可烦躁,一定要冷静的思考,认真的分析。要勇敢的面对问题,勇敢的接受问题,勇敢的处理问题,最后最勇敢的

4、解决问题。四、参考文献 数据结构(C+版) 叶核亚 主编 机械工业出版社 数据结构经典算法实现与习题解答 汪杰 编著 人民邮电出版社 数据结构课程设计 苏仕华 编著 机械工业出版社 数据结构程序设计题典 李春葆 编著 清华大学出版社 数据结构课程与题解(用C/C+描述) 胡圣荣 编著 北京大学出版社 程序运行流程图 char op /程序控制变量 If(op=Y|op=y) if(op=N|op=n) /本程序是邻接矩阵,邻接表的利用,共有4项功能,分别是:/(1)建立并显示图的邻接表。/(2)以非递归方式进行深度优先遍历,显示遍历结果。/(3)对该图进行拓扑排序,显示排序结果。/(4)给出某

5、一确定顶点到所有其它顶点的最短路径。#includeusing namespace std;const int MaxVertexes=20; /最大的顶点数 const int b=10000;template class Graph ;struct ArcNode/定义边结点 friend class Graph ; int adjvex; /和边(或弧)相关联的另一个顶点序号 int weight; /边(或弧)上的信息 ArcNode *nextarc ; /指向下一条边结点的指针ArcNode(int v,int w ) : adjvex( v ),weight(w),nextarc

6、( NULL ) ;/构造函数template struct VertexNode/ 定义顶点结点friend class Graph ; Type data; /顶点的信息 ArcNode *firstarc ; /指向依附该顶点的边链表;template class Graph VertexNode * VTable; /顶点表 int CurrentNumVertexes; /当前的顶点数 int CurrentNumArcs; /当前的边(或弧)数 public: int GetVertexPos( const Type &v );/ 取顶点v在数组中的位置 Graph(Type v,

7、int num=MaxVertexes); /构造函数 Type GetValue(int v); /取图中顶点v的值,如果顶点v不存在则返回空 int Getweight(int v1,int v2); /取边(或弧)上的权值 int GetFirstNeighbor(int v); /取图中顶点v的第一个邻接点的序号。如果不存在返回-1int GetNextNeighbor(int v1, int v2); /取图中下一个邻接点int ArcsMaxVertexesMaxVertexes;/用数组记录每个边的信息 int InVertex(Type &v); /在图中插入结点 int In

8、sertArc(int v1, int v2,int w);/在图中插入依附于v1和v2的边或弧,w是信息 int NumberOfVertexes( )return CurrentNumVertexes; /返回当前的顶点数 int NumberOfArcs() return CurrentNumArcs; /返回当前的边(或弧)数 int *dist; /最短路径长度数组 int *InDegree; /入度数组,记录每个顶点的入度 int *path; /最短路径的数组 int *s; /最短路径终点数组void link(); /输出邻接链表 void DFS(const int v,

9、int visited);/深度优先搜索 void DFTraverse (); /深度遍历 void TopologicalOrder(); /拓扑排序void ShortestPath(int n,int v);/最短路径;/templateint Graph:GetVertexPos(const Type &v ) /根据顶点v查找该顶点在邻接表中的位置 for(int i=0;iCurrentNumVertexes;i+) if(VTablei.data=v) return i; return -1;templateGraph:Graph( Type v , int num=MaxVe

10、rtexes) :CurrentNumVertexes(0), CurrentNumArcs(0) Type tail, head; int i=0,e,h,t,w,p=0; while(pMaxVertexes) for(int j=0;jMaxVertexes;j+) Arcspj=b; if(p=j) Arcspj=0; p+; InDegree=new intMaxVertexes; VTable=new VertexNodeMaxVertexes;/创建顶点表 for(i=0;inum;i+) /输入各顶点信息 InVertex(vi); /在顶点表中插入顶点vi InDegreei=0; cout e;/输入边的条数 coutendl; for(i=0;i e;i+) /逐条输入边 cout输入第i+1tailheadw; /输入一条边 int j=GetVertexPos(head); while(t=GetVertexPos(tail)=-1) cout输入的顶点(tail)不存在; while(h = GetVertexPos(head )=-1) cout输入的顶点(head)不存在; InsertArc (t,h,w); /插入一条边 InDegreej+; /顶点j的入度加1 coutendl;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号