数据结构与算法参考答案(第十一周)

一、试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中是否存在由顶点vivj的路径(i≠j)。注意算法中涉及的图的基本操作必须在此存储结构上实现。

答:

本题需要以邻接表的方式来实现DFS算法从而判断是否存在从一点到另一点的路径。由所学知识可以知道,实现DFS方式的方式有两种,用栈或者递归的方式。在这道题,使用递归的方式进行实现。

该算法实现的伪代码如下:

/*

    函数名称:给定图中,判断给定两点之间是否存在路径

    传入参数:图G,起点start,终点end

    返回值:bool型 如果有返回true,否则返回false

*/

bool DFS(Graph G, int start, int end) {

    EdgeNode *p;

    //如果找到了路径返回真

    if(start == end) {

        return true;

    }

    //标记起始点

    visited[start] = true;

    p = G.adjlist[start].firstedge;  //得到与起始点相连的边

    while(p) {

        int index = p -> adjVexIndex;   //获得该边对应的标号

        if(!visited[index] && DFS(G, index, end)) { //利用递归的方式继续进行寻找

            return true;

        }

        p = p -> next;

    }

    return false;   //如果找到最后也没找到证明没有路径

}

算法分析:由所学知识,我们能很容易知道DFS时间复杂度为O(n+e)。如果直接使用暴力搜索的话,会造成巨大的时间开销。综上,这是解决该问题的较好的方法。

 

posted @ 2020-08-25 10:25  LightAc  阅读(567)  评论(0编辑  收藏  举报
返回顶端