#define MaxVertexNum 100//最大顶点数目
typedef struct ArcNode{//边表结点
int adjvex;
struct ArcNode *next;
InfoType info;//权值
}ArcNode;
typedef struct VNode{//顶点表结点
VertexType data;
ArcNode *first;//指向第一条依附该顶点的弧
}VNode,AdjList[MaxVertexNum];
typedef struct{
AdjList vertices;//邻接表
int vexnum,arcnum;
}Graph;
bool ToplogicalSort(Graph G)
{//拓扑排序
InitStack(S);//初始化栈
for(int i=0;i<G.vexnum;i++)
if(indegree[i]==0)
Push(S,i);//入度为0的结点进栈
int count=0;
while(!IsEmpty(S))
{//栈顶元素出栈
Pop(S,i);
print[count++]=i;
for(p=G.vertices[i].firstarc;p;p=p->nextarc)
{//将所有i指向的结点入度减1,将入度为0的结点入栈
v=p->adjvex;
if(!(--indegree[v]))
Push(S,v);
}
if(count<G.vexnum)
return false;
else
return true;
}