Graphs
Shortest Path (Unweighted, via BFS)
BFS explores a graph layer by layer, so the first time it reaches a vertex
is along a shortest path. Track dist[v] and parent[v] while exploring,
then walk parents back from the target to reconstruct the route.
Algorithm
On the canonical graph from graph-adjacency-list, the shortest path from
1 to 6 is [1, 2, 4, 5, 6] with distance 4. The path is rebuilt from parent:
6 -> 5 -> 4 -> 2 -> 1, reversed.
Basic Implementation
basic.dart
import 'dart:collection';
void main() {
final adj = <int, List<int>>{
1: [2, 3],
2: [1, 4],
3: [1, 4],
4: [2, 3, 5],
5: [4, 6],
6: [5],
};
const src = 1;
const dst = 6;
final dist = <int, int>{src: 0};
final parent = <int, int>{src: 0};
final queue = Queue<int>.from([src]);
while (queue.isNotEmpty) {
final v = queue.removeFirst();
for (final nb in adj[v]!) {
if (!dist.containsKey(nb)) {
dist[nb] = dist[v]! + 1;
parent[nb] = v;
queue.add(nb);
}
}
}
final path = <int>[];
var node = dst;
while (node != 0) {
path.add(node);
node = parent[node]!;
}
final ordered = path.reversed.toList();
print(ordered);
print(dist[dst]);
}
Complexity
- Time: O(V + E)
- Space: O(V)
Implementation notes
- Dart: a
distMap doubles as the visited check,parentrecords predecessors (0 marks the source), and aQueuegives FIFO order. - The replay shows
dist,parent, and the queue filling in, then the reconstructed path, matching the lesson spec.
layers equal distance
BFS order equals distance in an unweighted graph.