已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
拓扑排序 基本要求 用邻接表建立一个有向图的存储结构。利用拓扑排序算法输出该图的拓扑排序序列。编程思路 首先图的创建,采用邻接表建立,逆向插入到单链表中,特别注意有向是不需要对称插入结点,且要把输入的字符在顶点数组中定位(LocateVex(Graph G,char *name),以便后来的遍历操作,几乎和图的创建一样,图的顶点定义时加入int indegree,关键在于indegree的计算,而最好的就是在创建的时候就算出入度,(没有采用书上的indegree【】数组的方法,那样会增加一个indegree算法,而是在创建的时候假如一句计数的代码(G.verticesj.indegree)+;)最后调用拓扑排序的算法,得出拓扑序列。程序代码 头文件:#define MAX_VERTEX_NUM 30#define STACKSIZE 30#define STACKINCREMENT 10#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define TRUE 1#define FALSE 0typedef int Status;typedef int InfoType;typedef int Status;typedef int SElemType;/* 定义弧的结构*/typedef struct ArcNode int adjvex; /*该边所指向的顶点的位置*/ struct ArcNode *nextarc; /*指向下一条边的指针*/ InfoType info; /*该弧相关信息的指针*/ArcNode; /*定义顶点的结构*/typedef struct VNodeint indegree; char data10; /*顶点信息*/ ArcNode *firstarc; /*指向第一条依附该顶点的弧的指针*/VNode,AdjListMAX_VERTEX_NUM;/*定义图的结构*/typedef struct AdjList vertices; int vexnum,arcnum; /*图的当前顶点数和弧数*/ int kind; /*图的类型标志*/Graph;/*定义栈的结构*/typedef structSElemType *base;SElemType *top;int stacksize;Stack; /*顶点定位*/int LocateVex(Graph G,char *name);/*创建有向图*/void CreateGraph(Graph &G);/*拓扑排序*/StatusTopologicalSort(Graph G);/*初始化栈*/Status InitStack(Stack &s) ;/*判断空*/Status EmptyStack(Stack s);/*压栈*/Status Push(Stack &s,int e);/*出栈*/Status Pop(Stack &s,int &e); 实现文件:#include #includemalloc.h#include tuopupaixuhead.h#include stdlib.h#include string.hbool visitedMAX_VERTEX_NUM;/* 顶点定位,返回位序 */int LocateVex(Graph G,char *name)int i;for(i=1;i=G.vexnum;i+)if(strcmp(name,G.verticesi.data)=0) /返回数组的位置return i;return -1;/* 创建有向图 */void CreateGraph(Graph &G)ArcNode *p;char name110,name210;int i,j,k;printf( 请输入顶点数,按回车键结束:);scanf(%d,&G.vexnum); printf( 请输入弧数,按回车键结束:);scanf(%d,&G.arcnum);printf( 请依次输入顶点名(用空格分开且字符小于10),按回车键结束:n); printf( );for(i=1;i=G.vexnum;i+) /初始化 scanf(%s,G.verticesi.data); G.verticesi.firstarc=NULL; G.verticesi.indegree=0; /度数均初始化为0 printf(nnnn); printf( 输入小提示n); printf( &1 为避免输入遗漏,最好从选择任意一点,输入所有相邻边n); printf( &2 输入边时格式(用空格分开,即格式为顶点(空格)顶点(空格)n); printf( 输入小提示nnnn);for(k=0;kadjvex=j; /插入到邻接表中,注意此处为逆向插入到单链表中 p-nextarc=G.verticesi.firstarc;G.verticesi.firstarc=p; /* 初始化栈 */Status InitStack(Stack &s) /创建一个空栈s.base=(int*)malloc(STACKSIZE*sizeof(int);if(!s.base) return (OVERFLOW);s.top=s.base;s.stacksize=STACKSIZE;return OK;/* 判空 */Status EmptyStack(Stack s)if(s.base=s.top) return 1;else return 0;/* 压栈 */Status Push(Stack &s,int e)if(s.top-s.base)s.stacksize) s.base=(SElemType*)realloc(s.base,(STACKSIZE+STACKINCREMENT)*sizeof(SElemType); if(!s.base) return(OVERFLOW); s.top=s.base+s.stacksize; s.stacksize+=STACKINCREMENT;*s.top+=e;return OK;/* 出栈 */Status Pop(Stack &s,int &e) e=*-s.top; return OK;/* 拓扑排序 */Status TopologicalSort(Graph G) /拓扑排序函数int i,j,k,e;int count=0; /用来统计顶点的个数Stack S; /定义一个栈,用来保存入度为0的顶点InitStack(S); /初始化栈for(i=1;inextarc) /找与第j个顶点的邻接顶点,并将其入度减1 k=p-adjvex; -(G.verticesk.indegree); if(G.verticesk.indegree=0) /如果入度为0,就入栈 Push(S,k); return OK;if(countG.vexnum) /count小于顶点的个数时候,说明有环,不符合拓扑排序的要求 printf(n不是有向无环图!n); return ERROR; /退出 主文件:#include #includemalloc.h#include tuopupaixuhead.h#include stdlib.h#include string.h/* 界面控制 */void main()Graph G; printf(n# 拓扑排序 #n); printf(n $n); printf(n); CreateGraph(G); printf(各点入度分布如下:nn); for(int i=1;i=G
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中国集装箱液袋行业市场占有率及投资前景预测分析报告
- 2026年中国芒果浆行业市场前景预测及投资价值评估分析报告
- 2026年中国流体装卸臂行业市场前景预测及投资价值评估分析报告
- 2026中国铁路昆明局集团有限公司招聘普通高校毕业生(1321)考试笔试参考题库附答案解析
- 2025贵州生态能源职业学院高技能人才引进1人笔试考试参考试题及答案解析
- 教育部哲学社会科学研究重大课题攻关项目投标评审书
- 老年人常见意外
- 2025年化妆品进出口生物防治服务协议
- 2025年团播数据统计分析合同
- 房地产 -2025年前三季度中国房地产企业代建排行榜
- 车间工装模具管理制度
- 长城汽车公司管理制度
- 口腔影像委托协议书
- 砌体工程的质量标准与施工要求
- 2025年音视频面试题及答案
- 血管壁的一般结构职业教育医学检验专业教学课件
- 医院运营管理课件
- 2025年食品机械与设备考试题(附答案)
- 2025网格员考试题库及参考答案
- 耐心资本助推农业强国的理论逻辑与制度设计
- 国家自然科学基金申请书模板三篇
评论
0/150
提交评论