floydWarshall<T> function
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;
}