图的拓扑排序.doc
上传人:sy****28 上传时间:2024-09-12 格式:DOC 页数:7 大小:64KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

图的拓扑排序.doc

图的拓扑排序.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

郑英丽----------20112124033----------图的拓扑排序PAGE\*MERGEFORMAT7实验代码:#include"stdio.h"#include"stdlib.h"#defineERROR0#defineTRUE1#defineOK1#defineFALSE0#defineOVERFLOW-2#defineSTACK_INIT_SIZE100//存储空间初始分配量#defineSTACKINCREMENT10//存储空间分配增量#defineINFINITY1000//最大值#defineMAX_VERTEX_NUM20//最大顶点个数typedefenum{DG,DN,UDG,UDN}GraphKind;//{有向图,有向网,无向图,无向网}//typedefintVRType;typedefintVertexType;typedefintElemType;typedefstructArcNode{intadjvex;//该弧所指向的顶点的位置structArcNode*nextarc;//指向下一条弧的指针//InfoType*info;}ArcNode;typedefstructVNode{VertexTypedata;ArcNode*firstarc;}VNode,AdjList[MAX_VERTEX_NUM];typedefstruct{AdjListvertices;intvexnum,arcnum;//图的当前顶点数和弧(边)数GraphKindkind;//图的种类标志}ALGraph;typedefstruct{ElemType*base;//在栈构造之前和销毁之后,base的值为BULLElemType*top;//栈顶指针intstacksize;//当前已分配的存储空间,以元素为单位}SqStack;intInitStack(SqStack&S){//构造一个空栈SS.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));if(!S.base)exit(OVERFLOW);//存储分配失败S.top=S.base;S.stacksize=STACK_INIT_SIZE;returnOK;}intStackEmpty(SqStackS){if(S.top-S.base>0)return0;elsereturn1;}intPush(SqStack&S,ElemTypee){//插入元素e为新的栈顶元素if(S.top-S.base>=S.stacksize){//栈满,追加存储空间S.base=(ElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemType));if(!S.base)exit(OVERFLOW);//存储分配失败S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top=e;S.top++;returnOK;}intPop(SqStack&S,ElemType&e){//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERRORif(S.top==S.base)returnERROR;//栈空,返回失败S.top--;e=*S.top;returnOK;}voidCreateALGraph(ALGraph&G){//构造图的邻接表inti;printf("顶点数,弧数:");scanf("%d,%d",&G.vexnum,&G.arcnum);for(i=0;i<G.vexnum;i++){G.vertices[i].data=i;G.vertices[i].firstarc=NULL;//相应的第一条弧置为空}intout,in;for(i=0;i<G.arcnum;i++){printf("弧尾,弧头:");scanf("%d,%d",&out,&in);ArcNode*arc=(ArcNode*)malloc(sizeof(ArcNode));arc->adjvex=in;arc->nextarc=NULL;//相应的下一条弧置为空if(G.vertices[out].firstarc!=NUL