数据结构拓展习题:图判断是否存在长度为k的简单路径
题目:采用链接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径。



bool visited[MAX_VERTEX_NUM];
bool ExitPath(ALGraph G, int u, int v, int length)
/*判断图G中从u顶点到v顶点是否存在长度为length的路径*/
{
if (length < 0)//路径为负显然不成立
return false;
if (u == v && length == 0)//递归终止条件
return true;
visited[u] = true;
ArcNode* p;
/*寻找u的邻接点是否存在到v的长度为length-1的路径*/
for (p = G.vertices[u].firstarc; p != NULL; p = p->nextarc)
{
if (!visited[p->adjvex])
if (ExitPath(G, p->adjvex, v, length - 1))
return 1;
}
/*如果沿某个方向不存在长度为length的路径
沿这个方向经过的顶点仍可能存在于沿其他方向的目标路径中
因此要恢复成未访问*/
visited[u] = false;
return false;
}