(**************************************************************************) (* *) (* Thibaut Balabonski, Sylvain Conchon, Jean-Christophe Filliâtre, *) (* Kim Nguyen, Laurent Sartre *) (* *) (* Informatique - MP2I/MPI - CPGE 1re et 2e années. *) (* Cours et exercices corrigés. Éditions Ellipses, 2022. *) (* *) (* https://www.informatique-mpi.fr/ *) (* *) (**************************************************************************) (* Graphes non orientés pondérés, par listes d'adjacence *) include Wdigraph type wgraph = wdigraph let add_edge g (d, u, v as e) = add_edge g e; add_edge g (d, v, u) let edges g = let l = ref [] in for i = 0 to size g - 1 do List.iter (fun (j, d) -> if j > i then l := (d, i, j) :: !l) (succ g i) done; !l (* attention : on doit dupliquer load (car add_edge a changé) et print (pour ne pas afficher les arcs deux fois) *) open Scanf let load file = let c = Scanning.open_in file in let n = bscanf c "%d\n" (fun n -> n) in let g = create n in let e = bscanf c "%d\n" (fun e -> e) in for _ = 1 to e do bscanf c "%d %d %f\n" (fun u v d -> add_edge g (d, u, v)) done; g open Format let print fmt g = fprintf fmt "%d@\n" (size g); let e = edges g in fprintf fmt "%d@\n" (List.length e); List.iter (fun (d, i, j) -> fprintf fmt "%d %d %f@\n" i j d) e let wdigraph g = g