Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 53s
Floyd-Warshall all-pairs shortest path with triple-nested for-loop:
for k = 0 to n - 1 do
for i = 0 to n - 1 do
for j = 0 to n - 1 do
if d.(i).(k) + d.(k).(j) < d.(i).(j) then
d.(i).(j) <- d.(i).(k) + d.(k).(j)
done
done
done
Graph (4 nodes, directed):
0->1 weight 5, 0->3 weight 10, 1->2 weight 3, 2->3 weight 1
Direct edge 0->3 = 10, but path 0->1->2->3 = 5+3+1 = 9.
Tests 2D array via Array.init with closure, nested .(i).(j) read
+ write, triple-nested for, in-place mutation under aliasing.
148 baseline programs total.
27 lines
540 B
OCaml
27 lines
540 B
OCaml
let inf_int = 1000000
|
|
|
|
let floyd n graph =
|
|
let d = Array.init n (fun i ->
|
|
Array.init n (fun j -> graph.(i).(j))) in
|
|
for k = 0 to n - 1 do
|
|
for i = 0 to n - 1 do
|
|
for j = 0 to n - 1 do
|
|
if d.(i).(k) + d.(k).(j) < d.(i).(j) then
|
|
d.(i).(j) <- d.(i).(k) + d.(k).(j)
|
|
done
|
|
done
|
|
done;
|
|
d
|
|
|
|
;;
|
|
|
|
let n = 4 in
|
|
let g = Array.init n (fun _ -> Array.make n inf_int) in
|
|
for i = 0 to n - 1 do g.(i).(i) <- 0 done;
|
|
g.(0).(1) <- 5;
|
|
g.(0).(3) <- 10;
|
|
g.(1).(2) <- 3;
|
|
g.(2).(3) <- 1;
|
|
let d = floyd n g in
|
|
d.(0).(3)
|