问答题
假设一个有向图G已经以十字链表形式存储在内存中,试写一个判断该有向图中是否有环路(回路)的算法。【中科院研究生院2005五(15分)】【东南大学2005数据结构部分五(15分)】
【正确答案】正确答案:本题也是判断有向图中是否有环路,可以用拓扑排序来解决,算法参照17题。值得指出,在拓扑排序一个顶点,删除所有从该顶点发出的弧时,用邻接表做存储结构,很容易找到邻接点,因为顶点的单链表中的邻接点域都是顶点的邻接点。但是,由于十字链表边(弧)结点中有两个结点域,要判断哪个是要找的邻接点。下面是找邻接点的语句: P=g[i].firstout; //顶点i已拓扑排序,下面是删除所有从它发出的弧 while(p) //处理顶点i的各邻接点的入度 {if(p一>tailvex==i)k=p一>headvex; //找顶点i的邻接点 else k=p->taiivex; g[k].indegree一一; //邻接点入度减1 if(g[k].indegree==0){g[k].indegree=top;top=k;}//入度为0的顶点再入栈 if(p一>headvex==i)p=p一>headlink; //找顶点i的下一邻接点 else p=p->taillink; }//while(p)
【答案解析】