Given a directed or undirected graph with non‑negative edge weights, design and implement bidirectional Dijkstra (“double Dijkstra”) to find the shortest path between a single source s and target t. Specify the data structures for the forward and reverse searches, the termination condition, how to compute the correct shortest distance when the frontiers meet, and how to reconstruct the full path. Analyze time and space complexity versus standard Dijkstra, and discuss edge cases such as disconnected graphs and multiple shortest paths.