有向无环图 DAG(Directed Acyclic Graph)
在学习拓扑排序的时候,我们知道如果一个有向图存在合理的拓扑序,那么这个图一定是DAG;
以下是拓扑排序的伪码描叙:
伪码描叙:
void TopSort()
{
for(图中的每一个顶点V){
if(Indegree[V]==0){
AddQ( Q,V );
}
}
while(IsEmpty( Q )){
V = DeleteQ( Q );
输出V,或者记录V的输出序号;cnt++;
for(V 的每个邻接点W ){
Indegree[W]--;
if(Indegree[W]==0){
AddQ( Q,W );
}
}
}
C语言实现的拓扑排序算法
/* 邻接表存储————拓扑排序算法 */
bool TopSort( LGraph* Graph,Vertex TopOrder[] )
{ /* 对Graph进行排序,TopOrder[]顺序存储排序后的顶点下标 */
int Indegree[NaxVertexNum];
VerTex V,W;
for(V=0;V<Graph->Nv;V++){
Indegree[V] = 0;
}
/*遍历图,得到Indegree[] */
Adj* p;
for(V=0;V<Graph->Nv;V++){
for(p=Graph->G[V];p;p=p->Next){
Indegree[p->AdjV]+&#