上图是具体的结构 ,要明确vertices是顶点数组,firstarc是第一个指向顶点的指针,nextarc是指向下一个顶点的指针,adjvex是相邻顶点的值,也就是在vertices的索引位置.
int visited[MAXSIZE];
int exist_path_len(ALGraph G,int i,int j,int k)
//判断邻接表方式存储的无向图G的顶点i到j是否存在长度为k的简单路径
{
if(i==j&&k==0) return true; //找到了一条路径,且长度符合要求
else if(k>0)
{
visited[i]=1;
for(p=G.vertices[i].firstarc;p!=NULL;p=p->nextarc)
{
m=p->adjvex;
if(!visited[m])
if(exist_path_len(G,m,j,k-1)) return true; //剩余路径长度减一
}//for
visited[i]=0; //本题允许曾经被访问过的结点出现在另一条路径中
//这里需要把已经访问的点重新置为0,因为如果当前不存在长度为k
//到达j点,那么这个点还是可以使用的,因为有可能从其他点出发
//可以到达j点并且长度为k
//可以看下图解释
}//else
return false; //没找到
}//exist_path_len
假如寻找无向图中1-4 ,k为3的路径
第一次路径为 1-3-4 ,查找失败,此时visited[3]已经被置为1,若不把visited[3]恢复为0,在递归到1-2-3-4这条路径时,会认为visited[3]已经访问过,从而寻找失败。