int BFS(Node root, Node target) {
Queue<Node> queue = new LinkedBlockingQueue(); // store all nodes which are waiting to be processed
int step = 0; // number of steps neeeded from root to current node
queue.add(root);
while (!queue.isEmpty()) {
step++;
int size = queue.size();
for (int i = 0; i < size; i++) {
Node cur = queue.poll();
if (cur.equals(target)) {
return step;
}
if (cur.tails != null) {
for (Node node : cur.tails) {
queue.add(node);
}
}
}
}
return -1;
}
/**
* 避免一个节点访问两次,单独检查访问过的结点
Java版-队列广度优先搜索(BFS)
于 2019-07-03 17:30:19 首次发布