双向搜索

从状态图上起点和终点同时开始进行宽度/深度优先搜索,如果发现相遇了,那么可以认为是获得了可行解。

双向广搜的步骤

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
开始结点 和 目标结点 入队列 q
标记开始结点为 1
标记目标结点为 2
while(队列q不为空)
{
  从 q.front() 扩展出新的s个结点

  如果 新扩展出的结点已经被其他数字标记过
    那么 表示搜索的两端碰撞
    那么 循环结束

  如果 新的s个结点是从开始结点扩展来的
    那么 将这个s个结点标记为1 并且入队q 

  如果 新的s个结点是从目标结点扩展来的
    那么 将这个s个结点标记为2 并且入队q
}

评论