代码:
bool TopSort( LGraph Graph, Vertex TopOrder[] ){
int k=0,n=Graph->Nv,v;
PtrToAdjVNode p;
int stack[MaxVertexNum],top=-1;
int inDegree[MaxVertexNum]={0};
for(int i=0;i<n;i++){ //统计入度
p=Graph->G[i].FirstEdge;
while(p){
inDegree[p->AdjV]++;
p=p->Next;
}
}
for(int i=0;i<n;i++){
if(inDegree[i]==0){
stack[++top]=i;
}
}
while(top>=0){
v=stack[top--];
TopOrder[k++]=v;
p=Graph->G[v].FirstEdge;
while(p){
inDegree[p->AdjV]--;
if(inDegree[p->AdjV]==0){
stack[++top]=p->AdjV;
}
p=p->Next;
}
}
if(k==n) //没有剩余结点
return true;
else
return false;
}
Sample:
由于使用栈的数据结构,导致深度优先输出
input:
8 8
0 1
1 2
1 3
2 4
3 5
4 7
5 6
6 7
out:
0 1 2 4 3 5 6 7