floydWarshall<T> function

Map<T, Map<T, num>> floydWarshall<T>(
  1. Set<T> nodes,
  2. List<WeightedEdge<T>> edges
)

Implementation

Map<T, Map<T, num>> floydWarshall<T>(
  Set<T> nodes,
  List<WeightedEdge<T>> edges,
) {
  final Map<T, Map<T, num>> dist = {
    for (final i in nodes)
      i: {for (final j in nodes) j: (i == j) ? 0 : double.infinity},
  };

  for (final e in edges) {
    dist[e.source]![e.target] =
        dist[e.source]![e.target]!.compareTo(e.weight) > 0
            ? e.weight
            : dist[e.source]![e.target]!;
  }

  for (final k in nodes) {
    for (final i in nodes) {
      for (final j in nodes) {
        final alt = dist[i]![k]! + dist[k]![j]!;
        if (alt < dist[i]![j]!) {
          dist[i]![j] = alt;
        }
      }
    }
  }

  return dist;
}