问题
求一条【从顶点i到顶点s】的简单路径
例子
求一条【A->E】的简单路径
若DFS不好,会造成这种情况:【A】->B->C->B->【A】->…->【E】。会产生回路
有路径的路径不是简单路径。
【所以】退回到以前遍历过的顶点(B),要将B从路径中删除
算法
found = False;
void DFSSearch(int v,int s, char *Path) {
//从第v个顶点出发递归地深度优先遍历图G
//求得一条从v到s的简单路径,并记录在Path中
visited[v] = True; //访问第v个顶点
Append(Path, getVertex(v) ); //将该顶点加入路径
for (w=FirstAdjVex(v); w!=0 && !found; w=NextAdjVex(v) ) //遍历邻接点
if (w==s) { //找到
found = True;
Append(Path, w);
} else if (!visited[w])//没有访问过,继续遍历
DFSSearch(w, LP);
if (!found) { //w的所有邻接点都找过了,也没有找到
Delete(Path); //把w从path上删除,避免回路
}
}