Six Degrees
Last updated
Last updated
/**
* Definition for Undirected graph.
* class UndirectedGraphNode {
* int label;
* List<UndirectedGraphNode> neighbors;
* UndirectedGraphNode(int x) {
* label = x;
* neighbors = new ArrayList<UndirectedGraphNode>();
* }
* };
*/
public class Solution {
/**
* @param graph a list of Undirected graph node
* @param s, t two Undirected graph nodes
* @return an integer
*/
public int sixDegrees(List<UndirectedGraphNode> graph,
UndirectedGraphNode s,
UndirectedGraphNode t) {
if (s == t) {
return 0;
}
Map<UndirectedGraphNode, Integer> visited = new HashMap<UndirectedGraphNode, Integer>();
Queue<UndirectedGraphNode> queue = new LinkedList<UndirectedGraphNode>();
queue.offer(s);
visited.put(s, 0);
while (!queue.isEmpty()) {
UndirectedGraphNode frontier = queue.poll();
int size = frontier.neighbors.size();
for (int i = 0; i < size; i++) {
UndirectedGraphNode node = frontier.neighbors.get(i);
if (visited.containsKey(node)) {
continue;
}
if (node == t) {
return visited.get(frontier) + 1;
}
queue.offer(node);
visited.put(node, visited.get(frontier) + 1);
}
}
return -1;
}
}