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