shortestPathUnweighted<T> function

List<T> shortestPathUnweighted<T>(
  1. Map<T, List<T>> graph,
  2. T start,
  3. T target
)

Implementation

List<T> shortestPathUnweighted<T>(Map<T, List<T>> graph, T start, T target) {
  if (start == target) return [start];
  final Map<T, T?> parent = <T, T?>{};
  final Set<T> visited = <T>{start};
  final List<T> queue = <T>[start];

  while (queue.isNotEmpty) {
    final T u = queue.removeAt(0);
    for (final T v in graph[u] ?? const []) {
      if (!visited.contains(v)) {
        visited.add(v);
        parent[v] = u;
        if (v == target) {
          final List<T> pathReversed = <T>[];
          T? cur = v;
          while (cur != null) {
            pathReversed.add(cur);
            cur = parent[cur];
          }
          return pathReversed.reversed.toList();
        }
        queue.add(v);
      }
    }
  }
  return <T>[];
}