zoukankan      html  css  js  c++  java
  • 刷题 | Lintcode 618. Search Graph Nodes

    [Problem]

    Given a undirected graph, a node and a target, return the nearest node to given node which value of it is target, return NULL if you can't find.

    There is a mapping store the nodes' values in the given parameters.

     Notice

    It's guaranteed there is only one available solution

    [Idea]

    BFS

    The solution provided here is quite typical as it use a queue to travese the graph node level by level if the given node could be set as the root node. Initially the queue is constructed with the only element, the root node. By next level, it means the neighbor list the current node holds.

    Considering the possibility of loops, a hash map is introduced here to avoid duplicate visiting. Once a node is visited, it will be pushed into the hashmap.

    [Code]

    /**
     * Definition for Undirected graph.
     * struct UndirectedGraphNode {
     *     int label;
     *     vector<UndirectedGraphNode *> neighbors;
     *     UndirectedGraphNode(int x) : label(x) {};
     * };
     */
    class Solution {
    public:
        /**
         * @param graph a list of Undirected graph node
         * @param values a hash mapping, <UndirectedGraphNode, (int)value>
         * @param node an Undirected graph node
         * @param target an integer
         * @return the a node
         */
        UndirectedGraphNode* searchNode(vector<UndirectedGraphNode*>& graph,
                                        map<UndirectedGraphNode*, int>& values,
                                        UndirectedGraphNode* node,
                                        int target) {
            // Write your code here
            queue<UndirectedGraphNode*> q;
            set<UndirectedGraphNode*> hash;
            
            q.push(node);
            hash.insert(node);
            while(!q.empty()) {
                UndirectedGraphNode* head = q.front();
                q.pop();
                if(values[head] == target) {
                    return head;
                }
                for(UndirectedGraphNode* n : head->neighbors) {
                    if(hash.find(n) == hash.end()) {
                        hash.insert(n);
                        q.push(n);
                    }
                }
            }
            return NULL;
        }
    };

    [Reference]

    1. Lintcode: Search Graph Nodes
    2. Jiuzhang Solution for Search Graph Nodes
  • 相关阅读:
    【maven】maven源码打包
    【分布式事务】阿里fescar
    第五章 mybatis批量更新update
    第二十九章 springboot + zipkin + mysql
    第二十八章 springboot + zipkin(brave定制-AsyncHttpClient)
    第二十七章 springboot + zipkin(brave-okhttp实现)
    附8 zipkin
    第二十六章 hystrix-dashboard + turbine
    附7 turbine
    第二章 部署war包到tomcat
  • 原文地址:https://www.cnblogs.com/casperwin/p/7451205.html
Copyright © 2011-2022 走看看