Bidirectional search

In computer science, bidirectional search is a method used for finding the shortest path between two items in a graph. It runs two simultaneous searches starting from the two items.[1]

Implementation

The example below uses two simultaneous breadth-first searches. <syntaxhighlight lang="java"> void bidirectionalSearch(Item a, Item b) {

   Queue qA = new Queue();
   Queue qB = new Queue();
   qA.enqueue(a);
   qB.enqueue(b);
   while (!qA.isEmpty() && !qB.isEmpty()) {
       if (!qA.isEmpty()) {
           Item v = qA.dequeue();
           if (aItem.found) return true;
           for (Item neighbor : v.neighbors()) {
               if (!neighbor.found) {
                   neighbor.found = true;
                   qA.enqueue(neighbor);
               }
           }
       }
       if (!qB.isEmpty()) {
           Item v = qB.dequeue();
           if (v.found) return true;
           for (Item neighbor : v.neighbors()) {
               if (!neighbor.found) {
                   neighbor.found = true;
                   qB.enqueue(neighbor);
               }
           }
       }
   }
   return false;

} </syntaxhighlight>

Related pages

References

  1. "Bidirectional search". Planning Algorithms. UIUC. Archived from the original on 21 February 2020. Retrieved 11 October 2020.