[图] DFS应用:求一条从顶点i到顶点s的简单路径

问题

求一条【从顶点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上删除,避免回路
    }
}

猜你喜欢

转载自blog.csdn.net/summer_dew/article/details/81625318