讨论
1.如何判定一个有向图有无环。/
Test_Circle(AlGraph){
//有向图G采用邻接表存储结构
//若G有无回路,输出G的拓扑序列,若有,返回ERROR
FindInDegree(G,indegree); // find out all the node*s indegree
InitStack(S);
count=0;
for(i=0;i<G.vexnum;i++)
if(!indegree[i])
push(S,i); //put all the node whose degree is zero into S
while(!StackEmpty(S)){
pop(S,p);
printf(p->data); count++
for(j=p->firstarc;j;j=j->nextarc)
if(!(--indegree[j])
push(S,j);
}//while
if(count<g.vexnum)
return ERROR;
}//Test_Circle
应用
1.拓扑排序
AOV-网:指顶点表示活动,弧表示活动间优先关系的有向无环图
1>在有向图中选一个没有前驱(即入度为0)的顶点并输出
2>删除该结点和图中以该结点为尾的所有弧,并重复之。
ToplogicalSort(AlGraph){
//有向图G采用邻接表存储结构
//若G有无回路,输出G的拓扑序列,若有,返回ERROR
FindInDegree(G,indegree); // find out all the node*s indegree
InitStack(S);
count=0;
for(i=0;i<G.vexnum;i++)
if(!indegree[i])
push(S,i); //put all the node whose degree is zero into S
while(!StackEmpty(S)){
pop(S,p);
printf(p->data); count++
for(j=p->firstarc;j;j=j->nextarc)
if(!(--indegree[j])
push(S,j);
}//while
return ok;
}//ToplogicalSort
2. 关键路径
AOE-网:指带权的有向无环图