voidTopoLogicSort(MGraph G){int stack[MaxVertexNum];int indegree[MaxVertexNum];for(int i =0; i <G.vexnum ;++i){
indegree[i]=0;}for(int i =0; i < G.vexnum;++i){for(int j =0; j < G.vexnum;++j){if(G.Edge[j][i]) indegree[i]++;}}int top=-1;for(int i =0; i < G.vexnum;++i){if(indegree[i]==0){
stack[++top]=i;}}int count=0,p;while(top>=0){
p=stack[top--];printf("%d ",p);
count++;for(int i =0; i < G.vexnum;++i){if(G.Edge[p][i]){if(!(--indegree[i]))
stack[++top]=i;}}}if(count<G.vexnum)printf("失败");elseprintf("成功");}
intmain(){
MGraph G;for(int i =0; i <5; i++){for(int j =0; j <5; j++){
G.Edge[i][j]=0;}}
G.vexnum =5;
G.Edge[0][1]=G.Edge[0][3]=1;
G.Edge[1][2]=G.Edge[1][3]=1;
G.Edge[3][2]=G.Edge[3][4]=1;
G.Edge[2][4]=1;TopoLogicSort(G);}