题目描述
对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。
给定图中的两个结点的指针UndirectedGraphNode* a,UndirectedGraphNode* b(请不要在意数据类型,图是有向图),请返回一个bool,代表两点之间是否存在一条路径(a到b或b到a)。
import java.util.*;
/*
public class UndirectedGraphNode {
int label = 0;
UndirectedGraphNode left = null;
UndirectedGraphNode right = null;
ArrayList<UndirectedGraphNode> neighbors = new ArrayList<UndirectedGraphNode>();
public UndirectedGraphNode(int label) {
this.label = label;
}
}*/
public class Path {
public boolean checkPath(UndirectedGraphNode a, UndirectedGraphNode b) {
// write code here
if(a==null||b==null) return false;
boolean res1 = findNode(a, b);
if(res1==true) return true;
boolean res2 = findNode(b, a);
return res2;
}
public boolean findNode(UndirectedGraphNode a, UndirectedGraphNode b){
LinkedList<UndirectedGraphNode> queue = new LinkedList<UndirectedGraphNode>();
HashSet<UndirectedGraphNode> set = new HashSet<UndirectedGraphNode>();
queue.add(a);
set.add(a);
while(!queue.isEmpty()){
UndirectedGraphNode tmp = queue.removeFirst();
if(tmp==b) return true;
for(UndirectedGraphNode w : tmp.neighbors){
if(set.contains(w)) continue;
queue.add(w);
set.add(w);
}
}
return false;
}
}