解:采用深度优先遍历方法,从顶点v出发,对每个访问的顶点w做标记(visited[w]=1)。若顶点w(先访问)和i(后访问)均已访问过,表示从顶点w到顶点i存在一条路径。当从顶点i出发遍历,发现顶点i到顶点w有一条边时,表示存在一个回路(该回路上包含顶点w和i)。算法Cycle(G,v,has)从顶点v出发判断图G中是否存在回路,has是布尔值,初始调用时置为false,执行后若为true表示有回路,否则表示图G中没有回路。
对应的算法如下:
void Cycle(AGraph *G,int v,bool &has)
{
//调用时has置初值false
ArcNode *p;
int w;
visited[v]=1; //置已访问标记
p=G-><