zoukankan      html  css  js  c++  java
  • 数据结构与算法参考答案(第十一周)

    一、试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中是否存在由顶点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)。如果直接使用暴力搜索的话,会造成巨大的时间开销。综上,这是解决该问题的较好的方法。

    作者:LightAc
    出处:https://www.cnblogs.com/lightac/
    联系:
    Email: dzz@stu.ouc.edu.cn
    QQ: 1171613053
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    Jzoj4822 完美标号
    Jzoj4822 完美标号
    Jzoj4792 整除
    Jzoj4792 整除
    Educational Codeforces Round 79 A. New Year Garland
    Good Bye 2019 C. Make Good
    ?Good Bye 2019 B. Interesting Subarray
    Good Bye 2019 A. Card Game
    力扣算法题—088扰乱字符串【二叉树】
    力扣算法题—086分隔链表
  • 原文地址:https://www.cnblogs.com/lightac/p/13558247.html
Copyright © 2011-2022 走看看