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,new HashSet<UndirectedGraphNode>()) || check(b,a,new HashSet<UndirectedGraphNode>());
}
public boolean check(UndirectedGraphNode from,UndirectedGraphNode to,HashSet<UndirectedGraphNode> visit){
if(from==to)
return true;
if(visit.contains(from))
return false;
ArrayList<UndirectedGraphNode> neighbors = from.neighbors;
for(UndirectedGraphNode n:neighbors)
{ if(check(n,to,visit))
return true;
}
visit.add(from);
return false;
}
}
对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。
给定图中的两个结点的指针UndirectedGraphNode* a,UndirectedGraphNode* b(请不要在意数据类型,图是有向图),请返回一个bool,代表两点之间是否存在一条路径(a到b或b到a)。