还剩8页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
拓扑排序[基本要求]用邻接表建立一个有向图的存储结构利用拓扑排序算法输出该图的拓扑排序序列[编程思路]首先图的创建,采用邻接表建立,逆向插入到单链表中,特殊注意有向是不需要对称插入结点,且要把输入的字符在顶点数组中定位LocateVexGraph G,char*name,以便后来的遍历操作,几乎和图的创建一样,图的顶点定义时加入int indegree,关键在于indegree的计算,而最好的就是在创建的时候就算出入度,没有采用书上的indegree数组的方法,那样会增加一个indegree算法,而是在创建的时候假如一句计数的代码G.vertices[j].indegree++;最后调用拓扑排序的算法,得出拓扑序列[程序代码]头文件#paJina MAX_VHxTHX_NUM cO#paJina STAO为SIZH cO#paJina STAO为INOxHMHNT10#paJina O为I#paJina HxxOx°#paJinaINHHASIH质H」#paJina OVHxH质OW#paJina TxUH1#paJina HAJ贡SH0$AdapaJ in$S$e$us:SAdapaJ in$InJoTAda:$AdapaJ in$S$e$us:SAdapaJ in$SHIamT人da:/*定义弧的结构*/SAdapaJ s$t§uo$AtioNopa}in$ep!vax:/*该边所指向的顶点的位置*//*指向下一条边的指针*//*该弧相关信息的指针*/s$tiuo$AtioNopa*nax$et§o:InJoTAda inJo:JArcNode;/*定义顶点的结构*/typedef structVNode{int indegree;char data
[10];/*顶点信息*/ArcNode*firstarc;/*指向第一条依附该顶点的弧的指针*/}VNode AdjList[MAX_VERTEX_NUM];z/*定义图的结构*/typedef struct{Adj Listvertices;int vexnumarcnum;/*图的当前顶点数和弧数*/zint kind;/*图的类型标志*/}Graph;/*定义栈的结构*/typedef structSEIemType*base;SEIemType*top;int stacksize;}Stack;/*顶点定位*/int LocateVexGraph G,char*name;/*创建有向图*/void CreateGraph GraphG;/*拓扑排序*/StatusTopologicalSortGraph G;/*初始化栈*/Status InitStackStacks;/*判断空*/Status EmptyStackStacks;/*压栈*/Status PushStacks,int e;/*出栈*/Status PopStacks,int e;实现文件include stdio.h#include,malloc.h,,#include tuopupaixuhead.h#include stdlib.hinclude string.hbool visited[MAX_VERTEX_NUM];/************************************************************顶点定位,返回位序************************************************************/int LocateVexGraphG,char*nameint i;fori=l;i=G.vexnum;i++ifstrcmpname,G.vertices[i].data==O〃返回数组的位置return i;return-1;}/************************************************************创建有向图************************************************************/void CreateGraph GraphG ArcNode*p;char namel
[10],name2
1111.IJHJJ±t±s655-44111132。