Floyd-Warshall efficiently finds the shortest paths between all pairs of vertices in a graph. Handles graphs with negative edge weights, but it cannot detect negative cycles.
Initialization:
Floyd-Warshall Algorithm:
Result:
def floydWarshall(graph):
V = len(graph)
dist = [[float('inf') for _ in range(V)] for _ in range(V)]
for i in range(0, V):
for j in range(0, V):
dist[i][j] = float('inf') if graph[i][j] == float('inf') else graph[i][j]
for k in range(0, V):
for i in range(0, V):
for j in range(0, V):
if dist[i][k] != float('inf') and dist[k][j] != float('inf') and dist[i][j] > dist[i][k] + dist[k][j]:
dist[i][j] = dist[i][k] + dist[k][j]
return dist
graph = [
[0, 5, float('inf'), 10],
[float('inf'), 0, 3, float('inf')],
[float('inf'), float('inf'), 0, 1],
[float('inf'), float('inf'), float('inf'), 0]
]
print(floydWarshall(graph))
function floydWarshall(graph) {
const V = graph.length;
const dist = [];
for (let i = 0; i < V; i++) {
dist[i] = [];
for (let j = 0; j < V; j++) {
dist[i][j] = graph[i][j] === Infinity ? Infinity : graph[i][j];
}
}
for (let k = 0; k < V; k++) {
for (let i = 0; i < V; i++) {
for (let j = 0; j < V; j++) {
if (dist[i][k] !== Infinity && dist[k][j] !== Infinity && dist[i][j] > dist[i][k] + dist[k][j]) {
dist[i][j] = dist[i][k] + dist[k][j];
}
}
}
}
return dist;
}
const graph = [
[0, 5, Infinity, 10],
[Infinity, 0, 3, Infinity],
[Infinity, Infinity, 0, 1],
[Infinity, Infinity, Infinity, 0]
];
console.log(floydWarshall(graph));