




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精选文库实验六 图的应用及其实现一、实验目的1进一步功固图常用的存储结构。2熟练掌握在图的邻接表实现图的基本操作。3理解掌握AOV网、AOE网在邻接表上的实现以及解决简单的应用问题。二、实验内容 从键盘上输入AOV网的顶点和有向边的信息,建立其邻接表存储结构,然后对该图拓扑排序,并输出拓扑序列. 试设计程序实现上述AOV网的类型定义和基本操作,完成上述功能。相关常量及结构定义:typedef int InfoType;typedef char VertexType;typedef int SElemType;#define STACK_INIT_SIZE 100 /存储空间初始分配量#define STAXKINCREMENT 10 /存储空间分配增量#define MAX_VERTEX_NUM 20typedef struct ArcNodeint adjvex;struct ArcNode *nextarc;InfoType *info;ArcNode;typedef struct VNodeVertexType data;struct ArcNode *firstarc;VNode,AdjListMAX_VERTEX_NUM;typedef struct ALGraph AdjList vertices; int vexnum, arcnum; int kind; ALGraph;typedef structSElemType *base;SElemType *top;int stacksize;SqStack;设计相关函数声明:int CreateDG(ALGraph &G)int InitStack(SqStack &S) int Push(SqStack &S,SElemType e)int Pop(SqStack &S,SElemType &e) int StackEmpty(SqStack S)void FindInDegree(ALGraph G,int *indegree)int TopologicalSort(ALGraph G)三、数据结构与核心算法的设计描述1.创建AOV网int CreateDG(ALGraph &G) int i,j,k,v1,v2; cout请输入该图的顶点数:请输入该图的边数:G.vexnumG.arcnum;for(i=0;iG.vexnum;i+)G.verticesi.data=i;G.verticesi.firstarc=NULL; cout请输入一条边的始点和终点:endl;for(k=0;kG.arcnum;+k) cout请输入第 k+1v1v2;i=v1; j=v2; while(iG.vexnum|jG.vexnum)cout请输入第 k+1v1v2;i=v1; j=v2; i-;j-;ArcNode *p;p=(ArcNode *)malloc(sizeof(ArcNode);if(!p) return -1;p-adjvex=j;p-nextarc=G.verticesi.firstarc;p-info=NULL; G.verticesi.firstarc=p;G.verticesi;return 0; 2.初始化栈int InitStack(SqStack &S)S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType);if(!S.base) exit (-1);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return 0;3.入栈int Push(SqStack &S,SElemType e)if(S.top-S.base=S.stacksize)S.base=(SElemType*)realloc(S.base,(S.stacksize+STAXKINCREMENT)*sizeof(SElemType);if(!S.base) exit (-1);S.top=S.base+S.stacksize;S.stacksize+=STAXKINCREMENT;*S.top+=e;return 0;4.出栈int Pop(SqStack &S,SElemType &e)if(S.top=S.base) return -1;e=*-S.top;return 0;5.判断栈是否为空int StackEmpty(SqStack S)if(S.top=S.base) return -1;else return 0;6.个顶点入度void FindInDegree(ALGraph G,int *indegree) int i; for(i=0;iG.vexnum;i+) indegreei=0; for(i=0;iadjvex+;G.verticesi.firstarc=G.verticesi.firstarc-nextarc; 7.拓扑排序int TopologicalSort(ALGraph G)int i,k,indegreeMAX_VERTEX_NUM;ArcNode *p;SqStack S;FindInDegree(G,indegree);InitStack(S);for(i=0;iG.vexnum;i+)if(!indegreei) Push(S,i);int count=0;while(!StackEmpty(S)Pop(S,i); couti+1nextarc)k=p-adjvex;if(!(-indegreek) Push(S,k);if(countG.vexnum) return -1;else return 0;四、函数的调用主函数主要设计:int main()ALGraph G;CreateDG(G);TopologicalSort(G);return 0;五、实验总结本次试验通过对有向图进行拓扑排序,我了解了有向图邻接表的存储结构更重要的的是学会了对有向图的拓扑排序算法,其中也将之前学过的栈结合起来,巧妙的找到了一个拓扑序列,可不足的是,该算法只能找到这一条拓扑序列,但是我相信通过完成了这次试验后我会改进算法而能将图的所有的拓扑序列找出来。六、程序清单#include using namespace std;typedef int InfoType;typedef char VertexType;typedef int SElemType;#define STACK_INIT_SIZE 100 #define STAXKINCREMENT 10 #define MAX_VERTEX_NUM 20typedef struct ArcNodeint adjvex;struct ArcNode *nextarc;InfoType *info;ArcNode;typedef struct VNodeVertexType data;struct ArcNode *firstarc;VNode,AdjListMAX_VERTEX_NUM;typedef struct ALGraph AdjList vertices; int vexnum, arcnum; int kind; ALGraph;typedef structSElemType *base;SElemType *top;int stacksize;SqStack;int CreateDG(ALGraph &G) int i,j,k,v1,v2; cout请输入该图的顶点数:请输入该图的边数:G.vexnumG.arcnum;for(i=0;iG.vexnum;i+)G.verticesi.data=i;G.verticesi.firstarc=NULL; cout请输入一条边的始点和终点:endl;for(k=0;kG.arcnum;+k) cout请输入第 k+1v1v2;i=v1; j=v2; while(iG.vexnum|jG.vexnum)cout请输入第 k+1v1v2;i=v1; j=v2; i-;j-;ArcNode *p;p=(ArcNode *)malloc(sizeof(ArcNode);if(!p) return -1;p-adjvex=j;p-nextarc=G.verticesi.firstarc;p-info=NULL; G.verticesi.firstarc=p;G.verticesi;return 0; int InitStack(SqStack &S)S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType);if(!S.base) exit (-1);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return 0;int Push(SqStack &S,SElemType e)if(S.top-S.base=S.stacksize)S.base=(SElemType*)realloc(S.base,(S.stacksize+STAXKINCREMENT)*sizeof(SElemType);if(!S.base) exit (-1);S.top=S.base+S.stacksize;S.stacksize+=STAXKINCREMENT;*S.top+=e;return 0;int Pop(SqStack &S,SElemType &e)if(S.top=S.base) return -1;e=*-S.top;return 0;int StackEmpty(SqStack S)if(S.top=S.base) return -1;else return 0;void FindInDegree(ALGraph G,int *indegree) int i; for(i=0;iG.vexnum;i+) indegreei=0; for(i=0;iadjvex+;G.verticesi.firstarc=G.verticesi.firstarc-nextarc; int TopologicalSort(ALGraph G)int i,k,indegreeMAX_VERTEX_NUM;ArcNode *p;SqStack S;FindInDegree(G,indegree);InitStack(S);for(i=0;iG.vexn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仓储管理权转让合同模板发布
- 拆迁补偿款专户管理与二手房交易资金监管合同
- 拆除施工噪声控制与环保合同
- 高端装备制造厂区租赁合同
- 车辆赠与及新能源汽车充电设施建设合同
- 楼房拆除合同协议书模板
- 消防大数据课件下载
- 小学生学习动力培养课件
- 融资租赁合同合作协议书
- 房屋装修租房合同协议书
- 2024年建筑业10项新技术
- 《客舱安全与应急处置》-课件:颠簸的原因及种类
- 混凝土回弹法测试原始记录表
- 《养老护理员》-课件:老年人卫生、环境、食品安全防护知识
- 健康体检科(中心)规章制度汇编
- 2022年7月浙江省普通高中学业水平考试语文试题(原卷版)
- DB11-T 2207-2023 市政桥梁工程数字化建造标准
- 山东省初中学业水平考试历史试题与答案解析(共四套)
- 人工智能在视频分析中的应用
- 维护和塑造国家安全
- 公开课三角形面积课件
评论
0/150
提交评论