建立网站原理seo关键词优化软件app
本文是[数据结构基础系列(7):图]中第11课时[拓扑排序]的例程。
(程序中graph.h是图存储结构的“算法库”中的头文件,详情请单击链接…)
[代码]
#include <stdio.h>
#include <malloc.h>
#include "graph.h"void TopSort(ALGraph *G)
{int i,j;int St[MAXV],top=-1; //栈St的指针为topArcNode *p;for (i=0; i<G->n; i++) //入度置初值0G->adjlist[i].count=0;for (i=0; i<G->n; i++) //求所有顶点的入度{p=G->adjlist[i].firstarc;while (p!=NULL){G->adjlist[p->adjvex].count++;p=p->nextarc;}}for (i=0; i<G->n; i++)if (G->adjlist[i].count==0) //入度为0的顶点进栈{top++;St[top]=i;}while (top>-1) //栈不为空时循环{i=St[top];top--; //出栈printf("%d ",i); //输出顶点p=G->adjlist[i].firstarc; //找第一个相邻顶点while (p!=NULL){j=p->adjvex;G->adjlist[j].count--;if (G->adjlist[j].count==0)//入度为0的相邻顶点进栈{top++;St[top]=j;}p=p->nextarc; //找下一个相邻顶点}}
}int main()
{ALGraph *G;int A[7][7]={{0,0,1,0,0,0,0},{0,0,0,1,1,0,1},{0,0,0,1,0,0,0},{0,0,0,0,1,1,0},{0,0,0,0,0,0,0},{0,0,0,0,0,0,0},{0,0,0,0,0,1,0}};ArrayToList(A[0], 7, G);DispAdj(G);printf("\n");printf("拓扑序列:");TopSort(G);printf("\n");return 0;
}