8 % Number of edges (directed arcs)
11 set of int: Edges = 1..M;
13 array[Edges] of int: L;
15 array[Edges] of 0..N-1: Edge_Start;
16 array[Edges] of 0..N-1: Edge_End;
18 % Variable indicating if edge is used
19 array[Edges] of var 0..1: x;
22 forall( i in 0..N-1 ) (
25 sum(e in Edges where Edge_Start[e] = i)(x[e]) -
27 sum(e in Edges where Edge_End[e] = i)(x[e])
30 sum(e in Edges where Edge_Start[e] = i)(x[e]) -
31 sum(e in Edges where Edge_End[e] = i)(x[e])
34 sum(e in Edges where Edge_Start[e] = i)(x[e]) -
35 sum(e in Edges where Edge_End[e] = i)(x[e])
41 solve minimize sum(e in Edges)( L[e] * x[e] );
44 output ["Length: ", show(sum(e in Edges)(L[e] * x[e])), "\n"] ++
45 ["Start : ", show(Start), "\n"] ++
46 ["End : ", show(End), "\n\n"] ++
47 ["Edges in shortest path:\n"] ++
49 then show(Edge_Start[e]) ++ " -> " ++ show(Edge_End[e]) ++ "\n"