題目描述
對於一個有向圖,請實現一個算法,找出兩點之間是否存在一條路徑。
給定圖中的兩個結點的指針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) {
return check(a,b)||check(b,a);
}
private boolean check(UndirectedGraphNode a, UndirectedGraphNode b){
if(a == null || b == null){
return false;
}else if(a == b){
return true;
}
LinkedList<UndirectedGraphNode> q=new LinkedList();
ArrayList<UndirectedGraphNode> checkedMap = new ArrayList<UndirectedGraphNode>();
q.add(a);
checkedMap.add(a);
while(!q.isEmpty()){
UndirectedGraphNode node=q.poll();
for(UndirectedGraphNode temp:node.neighbors){
if(!checkedMap.contains(temp)){
if(temp==b){
return true;
}else{
checkedMap.add(temp);
q.add(temp);
}
}
}
}
return false;
}
}