问答题 在有向图G中,如果r到G中的每个结点都有路径可达,则称结点r为G的根结点。编写一个算法完成下列功能:(1)建立有向图G的邻接表存储结构;(2)判断有向图G是否有根,若有,则打印出所有根结点的值。【东北大学2001五(15分)】【中国海洋大学2006九(15分)】
【正确答案】正确答案:使用深度优先遍历,设在主调函数中从顶点1,开始进入dfs(v),对遍历顶点记数,若退出dfs()前,已访问完有向图的全部顶点(设为n个),则有向图有根,v为根结点。将n个顶点从1到n编号,各调用一次dfs()过程,就可以求出全部的根结点。判断有向图是否有根的算法的核心语句段如下: Void dfS(v) fvisited[v]=1; num++; //访问的顶点数num+1,num是全局变量,初值是0 if(num==n)(cout<adjvex]==0)dfs(p一>adjvex); p=p一>next; }//while visited[v]=0;num—-; //恢复顶点v,使该顶点可重新使用 }//dfs
【答案解析】