public int sixDegrees(List<UndirectedGraphNode> graph,
UndirectedGraphNode s,
UndirectedGraphNode t) {
if (graph == null) return 0;
if (s == t) return 0;
if (s.neighbors.contains(t)) return 1;
HashMap<UndirectedGraphNode, Integer> map = new HashMap<>();
Queue<UndirectedGraphNode> q = new LinkedList<>();
q.add(s);
map.put(s, 0);
while (!q.isEmpty()) {
UndirectedGraphNode node = q.poll();
int step = map.get(node);
for (int i = 0; i < node.neighbors.size(); i++) {
if (map.containsKey(node.neighbors.get(i))) continue;
map.put(node.neighbors.get(i), step + 1);
q.offer(node.neighbors.get(i));
if (node.neighbors.get(i) == t)
return step + 1;
}
}
return -1;
}