【java】【伪代码】广度优先搜索模板
/**
*返回目标根节点与目标节点之间的最短距离
*/
int BFS(Node root, Node target){
Queue<Node> queue;//用于储存待处理的节点
int step = 0;//用于纪录根节点到目标节点的最短路径
//初始化
add root to queue;
//BFS
while(queue is not empty){
step = step+1;
//迭代队列中已经存在的节点
int size = queue.size();
for(int i = 0; i < size; i++){
Node cur = the first node in queue;
return step if cur is target;
for(Node next : the neighbors of cur){
add next to queue;
}
remove the first node from queue;
}
}
return -1; //没有从根节点通向目标节点的路径
}
有哈希表的版本:
/**
*返回目标根节点与目标节点之间的最短距离
*/
int BFS(Node root, Node target){
Queue<Node> queue;
Set<Node> used;
int step = 0;//用于纪录根节点到目标节点的最短路径
//初始化
add root to queue;//用于储存待处理的节点
add root to used;//用于存放所有访问过的节点
// BFS
while(queue is not empty){
step = step + 1;
//迭代队列中已经存在的节点
int size = queue.size();
for(int i = 0; i < size; i++){
Node cur = the first node in queue;
return step if cur is target;
for(Node next : the neighbors of cur){
if(next is not in used){
add next to queue;
add next to used;
}
}
remove the first node from queue;
}
}
return -1;//没有从根节点通向目标节点的路径
}