【正确答案】所谓简单路径是指路径上的顶点不重复。本题利用回溯深度优先搜索方法,即在搜索到一套合适的路径时,输出路径,擦除标记,继续搜索满足条件的路径,用数组A保存走过的路径。在当前的结点为Vj且路径长度为L时,输出路径A。
int visited[Vnum],A[Vnum]; //Vnum是已经定义的常量
void dfs1(graph *g,int vi,int vj,int L,int d)
//d是到当前为止已走过的路径长度,调用时初值为-1
{
int v,i;
arcnode *p;
visited[vi]=1;
d++;
A[d]=vi;
if(vi==vj && d==L)
{
cout<<"一条路径: ";
for(i=0;i<=d;i++)
cout<<A[i]<<" ";
}
p=g→adjlist[vi].firstarc; //找vi的第一个邻接顶点
while(p!=NULL)
{
v=p→adjvex; //v为vi的邻接顶点
if(visited[v]==0) //若该顶点未标记访问,则递归访问
dfs1(g,v,vj,L,d);
p=p→nextare; //找vi的下一个邻接顶点
}
visited[vi]=0; //擦除访问标记,以使该顶点可重新使用
--d;
}
【答案解析】