2017.9.37
就是从一个点开始遍历,如果找到了另外一个点,就表示存在着路。
需要注意的就是,要设置visit,不然如果出现环的话,就会陷入死循环。
/**
* 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
LinkedList<DirectedGraphNode> queue = new LinkedList<>();
HashSet<DirectedGraphNode> visit = new HashSet<>();
queue.addFirst(s);
//visit.add(s);
while(!queue.isEmpty()){
if(!queue.isEmpty()){
s = queue.pollLast();
if(visit.contains(s)){
continue;
}
visit.add(s);
if(s.label == t.label){
return true;
}
}
if(!s.neighbors.isEmpty()){
for(DirectedGraphNode node : s.neighbors){
queue.addFirst(node);
}
}
}
return false;
}
}