问答题 假设图采用邻接表存储,编写一个函数,利用深度优先搜索算法,求出无向图中通过给定点v的所有简单回路。
【正确答案】输出路径的条件为d>=2。实现本题功能的程序代码如下: int visited[Vnum],A[Vnum]; void dfs1(graph *g,int vi,int vj,int d) { int v,i; arcnode *p; visited[vi]=1; ++d; A[d]=vi; if(vi==vj && d>=2) //条件d>=2 { cout<<"一条路径: "; for(i=0;i<=d; ++i) cout<<A[i]<<" "; cout<<endl; } p=g→adjlist[vi].firstarc; //找vi的第一个邻接顶点 while(p!=NULL) { v=p→adjvex; //v为vi的邻接顶点 if(visited[v]==0 || v==vj) //若该顶点未标记访问,或为vj,则递归访问 dfs1(g,v,vj,d); p=p→nextarc; //找vi的下一个邻接顶点 } visited[vi]=0; //擦除访问标记,以使该顶点可重新使用 --d; } void cycle(graph *g,int vi,int d) { dfs1(g,vi,vi,d); }
【答案解析】