lintcode-medium-Route Between Two Nodes in Graph
Given a directed graph, design an algorithm to find out whether there is a route between two nodes.
Example
Given graph:
A----->B----->C
\ |
\ |
\ |
\ v
->D----->E
for s = B
and t = E
, return true
for s = D
and t = C
, return false
/** * Definition for Directed graph. * class DirectedGraphNode { * int label; * ArrayList<DirectedGraphNode> neighbors; * DirectedGraphNode(int x) { * label = x; * neighbors = new ArrayList<DirectedGraphNode>(); * } * }; */ public class Solution { /** * @param graph: A list of Directed graph node * @param s: the starting Directed graph node * @param t: the terminal Directed graph node * @return: a boolean value */ public boolean hasRoute(ArrayList<DirectedGraphNode> graph, DirectedGraphNode s, DirectedGraphNode t) { // write your code here Queue<DirectedGraphNode> queue = new LinkedList<DirectedGraphNode>(); HashSet<DirectedGraphNode> set = new HashSet<DirectedGraphNode>(); if(s == t) return true; queue.offer(s); set.add(s); while(!queue.isEmpty()){ DirectedGraphNode temp = queue.poll(); for(DirectedGraphNode node: temp.neighbors){ if(node == t) return true; if(!set.contains(node)){ queue.offer(node); set.add(node); } } } return false; } }