Search Graph Nodes

来源:互联网 发布:淘宝游戏店铺转让 编辑:程序博客网 时间:2024/06/05 03:50

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.

java

/** * Definition for graph node. * class UndirectedGraphNode { *     int label; *     ArrayList<UndirectedGraphNode> neighbors; *     UndirectedGraphNode(int x) {  *         label = x; neighbors = new ArrayList<UndirectedGraphNode>();  *     } * }; */public class Solution {    /**     * @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     */    public UndirectedGraphNode searchNode(ArrayList<UndirectedGraphNode> graph,                                          Map<UndirectedGraphNode, Integer> values,                                          UndirectedGraphNode node,                                          int target) {        // Write your code here        if (node == null || values == null) {            return null;        }        if (values.get(node) == target) {            return node;        }        Queue<UndirectedGraphNode> queue = new LinkedList<>();        Set<UndirectedGraphNode> set = new HashSet<>();        queue.offer(node);        set.add(node);        while (!queue.isEmpty()) {            UndirectedGraphNode root = queue.poll();            for (UndirectedGraphNode nei : root.neighbors) {                if (values.get(nei) == target) {                    return nei;                }                if (set.contains(nei)) {                    continue;                } else {                    set.add(nei);                    queue.offer(nei);                }            }        }        return null;    }}
python

from Queue import Queue# Definition for a undirected graph node# class UndirectedGraphNode:#     def __init__(self, x):#         self.label = x#         self.neighbors = []class Solution:    # @param {UndirectedGraphNode[]} graph a list of undirected graph node    # @param {dict} values a dict, <UndirectedGraphNode, (int)value>    # @param {UndirectedGraphNode} node an Undirected graph node    # @param {int} target an integer    # @return {UndirectedGraphNode} a node    def searchNode(self, graph, values, node, target):        # Write your code here        if node is None or graph is None or values is None:            return None        if values[node] == target:            return node                    queue = Queue()        queue.put(node)        arr = set([node])        while not queue.empty():             n = queue.get()            for root in n.neighbors:                if values[root] == target:                    return root                if root in arr:                    continue                else:                    arr.add(root)                    queue.put(root)        return None                



原创粉丝点击