def print_matrix(matrix, iteration, matrix_name):
print(f"After iteration {iteration}, {matrix_name}:“)
for row in matrix:
formatted_row = [’ ∞’ if x == float(‘inf’) else f’{x:3}’ for x in row]
print(‘[{}]’.format(', '.join(formatted_row)))
print()

def initialize_matrices(num_vertices, edges):
inf = float(‘inf’)
D = [[inf if i != j else 0 for i in range(num_vertices)] for j in range(num_vertices)]
P = [[0 if i != j else 0 for i in range(num_vertices)] for j in range(num_vertices)]

for start, end, weight in edges:
D[start][end] = weight
P[start][end] = start + 1

return D, P

def floyd_warshall_with_printing(num_vertices, edges):
D, P = initialize_matrices(num_vertices, edges)

print_matrix(D, 0, “D0”)
print_matrix(P, 0, “P0”)

for k in range(num_vertices):
for i in range(num_vertices):
for j in range(num_vertices):
if D[i][k] + D[k][j] < D[i][j]:
D[i][j] = D[i][k] + D[k][j]
P[i][j] = P[k][j]

print_matrix(D, k + 1, f"D{k + 1}”)
print_matrix(P, k + 1, f"P{k + 1}“)

return D, P

edges = [
(0, 1, 4), (0, 5, 10), (1, 0, 3), (1, 3, 18),
(2, 1, 6), (3, 1, 5), (3, 2, 15), (3, 4, 2),
(3, 5, 19), (3, 6, 5), (4, 2, 12), (4, 3, 1),
(5, 6, 10), (6, 3, 8)
]

num_vertices = 7

final_D, final_P = floyd_warshall_with_printing(num_vertices, edges)

print(“Final Distance Matrix:”)
for row in final_D:
formatted_row = [’ ∞’ if x == float(‘inf’) else f’{x:3}’ for x in row]
print(‘[{}]’.format(', '.join(formatted_row)))

print(”\nFinal Predecessor Matrix:")
for row in final_P:
formatted_row = [f’{x:3}’ for x in row]
print(‘[{}]’.format(', '.join(formatted_row)))
After iteration 0, D0:
[ 0, 4, ∞, ∞, ∞, 10, ∞]
[ 3, 0, ∞, 18, ∞, ∞, ∞]
[ ∞, 6, 0, ∞, ∞, ∞, ∞]
[ ∞, 5, 15, 0, 2, 19, 5]
[ ∞, ∞, 12, 1, 0, ∞, ∞]
[ ∞, ∞, ∞, ∞, ∞, 0, 10]
[ ∞, ∞, ∞, 8, ∞, ∞, 0]

After iteration 0, P0:
[ 0, 1, 0, 0, 0, 1, 0]
[ 2, 0, 0, 2, 0, 0, 0]
[ 0, 3, 0, 0, 0, 0, 0]
[ 0, 4, 4, 0, 4, 4, 4]
[ 0, 0, 5, 5, 0, 0, 0]
[ 0, 0, 0, 0, 0, 0, 6]
[ 0, 0, 0, 7, 0, 0, 0]

After iteration 1, D1:
[ 0, 4, ∞, ∞, ∞, 10, ∞]
[ 3, 0, ∞, 18, ∞, 13, ∞]
[ ∞, 6, 0, ∞, ∞, ∞, ∞]
[ ∞, 5, 15, 0, 2, 19, 5]
[ ∞, ∞, 12, 1, 0, ∞, ∞]
[ ∞, ∞, ∞, ∞, ∞, 0, 10]
[ ∞, ∞, ∞, 8, ∞, ∞, 0]

After iteration 1, P1:
[ 0, 1, 0, 0, 0, 1, 0]
[ 2, 0, 0, 2, 0, 1, 0]
[ 0, 3, 0, 0, 0, 0, 0]
[ 0, 4, 4, 0, 4, 4, 4]
[ 0, 0, 5, 5, 0, 0, 0]
[ 0, 0, 0, 0, 0, 0, 6]
[ 0, 0, 0, 7, 0, 0, 0]

After iteration 2, D2:
[ 0, 4, ∞, 22, ∞, 10, ∞]
[ 3, 0, ∞, 18, ∞, 13, ∞]
[ 9, 6, 0, 24, ∞, 19, ∞]
[ 8, 5, 15, 0, 2, 18, 5]
[ ∞, ∞, 12, 1, 0, ∞, ∞]
[ ∞, ∞, ∞, ∞, ∞, 0, 10]
[ ∞, ∞, ∞, 8, ∞, ∞, 0]

After iteration 2, P2:
[ 0, 1, 0, 2, 0, 1, 0]
[ 2, 0, 0, 2, 0, 1, 0]
[ 2, 3, 0, 2, 0, 1, 0]
[ 2, 4, 4, 0, 4, 1, 4]
[ 0, 0, 5, 5, 0, 0, 0]
[ 0, 0, 0, 0, 0, 0, 6]
[ 0, 0, 0, 7, 0, 0, 0]

After iteration 3, D3:
[ 0, 4, ∞, 22, ∞, 10, ∞]
[ 3, 0, ∞, 18, ∞, 13, ∞]
[ 9, 6, 0, 24, ∞, 19, ∞]
[ 8, 5, 15, 0, 2, 18, 5]
[ 21, 18, 12, 1, 0, 31, ∞]
[ ∞, ∞, ∞, ∞, ∞, 0, 10]
[ ∞, ∞, ∞, 8, ∞, ∞, 0]

After iteration 3, P3:
[ 0, 1, 0, 2, 0, 1, 0]
[ 2, 0, 0, 2, 0, 1, 0]
[ 2, 3, 0, 2, 0, 1, 0]
[ 2, 4, 4, 0, 4, 1, 4]
[ 2, 3, 5, 5, 0, 1, 0]
[ 0, 0, 0, 0, 0, 0, 6]
[ 0, 0, 0, 7, 0, 0, 0]

After iteration 4, D4:
[ 0, 4, 37, 22, 24, 10, 27]
[ 3, 0, 33, 18, 20, 13, 23]
[ 9, 6, 0, 24, 26, 19, 29]
[ 8, 5, 15, 0, 2, 18, 5]
[ 9, 6, 12, 1, 0, 19, 6]
[ ∞, ∞, ∞, ∞, ∞, 0, 10]
[ 16, 13, 23, 8, 10, 26, 0]

After iteration 4, P4:
[ 0, 1, 4, 2, 4, 1, 4]
[ 2, 0, 4, 2, 4, 1, 4]
[ 2, 3, 0, 2, 4, 1, 4]
[ 2, 4, 4, 0, 4, 1, 4]
[ 2, 4, 5, 5, 0, 1, 4]
[ 0, 0, 0, 0, 0, 0, 6]
[ 2, 4, 4, 7, 4, 1, 0]

After iteration 5, D5:
[ 0, 4, 36, 22, 24, 10, 27]
[ 3, 0, 32, 18, 20, 13, 23]
[ 9, 6, 0, 24, 26, 19, 29]
[ 8, 5, 14, 0, 2, 18, 5]
[ 9, 6, 12, 1, 0, 19, 6]
[ ∞, ∞, ∞, ∞, ∞, 0, 10]
[ 16, 13, 22, 8, 10, 26, 0]

After iteration 5, P5:
[ 0, 1, 5, 2, 4, 1, 4]
[ 2, 0, 5, 2, 4, 1, 4]
[ 2, 3, 0, 2, 4, 1, 4]
[ 2, 4, 5, 0, 4, 1, 4]
[ 2, 4, 5, 5, 0, 1, 4]
[ 0, 0, 0, 0, 0, 0, 6]
[ 2, 4, 5, 7, 4, 1, 0]

After iteration 6, D6:
[ 0, 4, 36, 22, 24, 10, 20]
[ 3, 0, 32, 18, 20, 13, 23]
[ 9, 6, 0, 24, 26, 19, 29]
[ 8, 5, 14, 0, 2, 18, 5]
[ 9, 6, 12, 1, 0, 19, 6]
[ ∞, ∞, ∞, ∞, ∞, 0, 10]
[ 16, 13, 22, 8, 10, 26, 0]

After iteration 6, P6:
[ 0, 1, 5, 2, 4, 1, 6]
[ 2, 0, 5, 2, 4, 1, 4]
[ 2, 3, 0, 2, 4, 1, 4]
[ 2, 4, 5, 0, 4, 1, 4]
[ 2, 4, 5, 5, 0, 1, 4]
[ 0, 0, 0, 0, 0, 0, 6]
[ 2, 4, 5, 7, 4, 1, 0]

After iteration 7, D7:
[ 0, 4, 36, 22, 24, 10, 20]
[ 3, 0, 32, 18, 20, 13, 23]
[ 9, 6, 0, 24, 26, 19, 29]
[ 8, 5, 14, 0, 2, 18, 5]
[ 9, 6, 12, 1, 0, 19, 6]
[ 26, 23, 32, 18, 20, 0, 10]
[ 16, 13, 22, 8, 10, 26, 0]

After iteration 7, P7:
[ 0, 1, 5, 2, 4, 1, 6]
[ 2, 0, 5, 2, 4, 1, 4]
[ 2, 3, 0, 2, 4, 1, 4]
[ 2, 4, 5, 0, 4, 1, 4]
[ 2, 4, 5, 5, 0, 1, 4]
[ 2, 4, 5, 7, 4, 0, 6]
[ 2, 4, 5, 7, 4, 1, 0]

Final Distance Matrix:
[ 0, 4, 36, 22, 24, 10, 20]
[ 3, 0, 32, 18, 20, 13, 23]
[ 9, 6, 0, 24, 26, 19, 29]
[ 8, 5, 14, 0, 2, 18, 5]
[ 9, 6, 12, 1, 0, 19, 6]
[ 26, 23, 32, 18, 20, 0, 10]
[ 16, 13, 22, 8, 10, 26, 0]

Final Predecessor Matrix:
[ 0, 1, 5, 2, 4, 1, 6]
[ 2, 0, 5, 2, 4, 1, 4]
[ 2, 3, 0, 2, 4, 1, 4]
[ 2, 4, 5, 0, 4, 1, 4]
[ 2, 4, 5, 5, 0, 1, 4]
[ 2, 4, 5, 7, 4, 0, 6]
[ 2, 4, 5, 7, 4, 1, 0]

=== Code Execution Successful === i want the program to print ‘-’ in the Predecessor matrix where there is a directed edge between the 2 vertices