• 有向路径检查 牛客网 程序员面试金典 C++ Python


    有向路径检查 牛客网 程序员面试金典 C++ Python

    • 题目描述
    • 对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。
    • 给定图中的两个结点的指针DirectedGraphNode* a, DirectedGraphNode* b(请不要在意数据类型,图是有向图),请返回一个bool,代表两点之间是否存在一条路径(a到b或b到a)。

    C++

    class Path {
    public:
        bool checkPath(UndirectedGraphNode* a, UndirectedGraphNode* b){
            return check(a,b) || check(b,a);
        }
    
        bool check(UndirectedGraphNode* a, UndirectedGraphNode* b){
            if (NULL == a || NULL == b) return false;
            if (a == b) return true;
            map<UndirectedGraphNode*, bool> dict;
            queue<UndirectedGraphNode*> que;
            que.push(a);
            while(!que.empty()){
                UndirectedGraphNode* ptr = que.front();
                dict[ptr] = true;
                for(int i = 0; i<ptr->neighbors.size();i++){
                    if((ptr->neighbors)[i] == b) return true;
                    if(ptr->neighbors[i] && dict[ptr->neighbors[i]]!=true)
                        que.push((ptr->neighbors)[i]);
                }
                que.pop();
            }
            return false;
        }
    };

    Python
     

    class Path:
    #run:321ms memory:5860k
        def checkPath(self, a, b):
            v1, v2 = set(), set()
            return self.dfs(v1, a, b) or self.dfs(v2, b, a)
        
        def dfs(self,v, t, end):
            if t == end:return True
            if t in v:return False
            v.add(t)
            for x in t.neighbors:
                if self.dfs(v, x, end):return True
            return False
  • 相关阅读:
    深入了解Java ClassLoader、Bytecode 、ASM、cglib (I)
    如何在ant里import
    敏捷练习(1)评估我的生活方向盘
    你是一个合格的孩子吗?
    [转] C# 路径(目录)
    XML学习记录
    js学习总结不断更新(1)
    LINQ TO XML练习
    做技术,切不可沉湎于技术
    js学习总结持续更新(2)
  • 原文地址:https://www.cnblogs.com/vercont/p/10210315.html
Copyright © 2020-2023  润新知