in lib/src/shortest_path.dart [71:106]
Iterable<T> Function(T) edges, {
T? target,
bool Function(T, T)? equals,
int Function(T)? hashCode,
}) {
final distances = HashMap<T, _Tail<T>>(equals: equals, hashCode: hashCode);
distances[start] = _Tail<T>();
final nonNullEquals = equals ??= _defaultEquals;
final isTarget =
target == null ? _neverTarget : (T node) => nonNullEquals(node, target);
if (isTarget(start)) {
return distances;
}
final toVisit = ListQueue<T>()..add(start);
while (toVisit.isNotEmpty) {
final current = toVisit.removeFirst();
final currentPath = distances[current]!;
for (var edge in edges(current)) {
final existingPath = distances[edge];
if (existingPath == null) {
distances[edge] = currentPath.append(edge);
if (isTarget(edge)) {
return distances;
}
toVisit.add(edge);
}
}
}
return distances;
}