diff --git a/src/main.ml b/src/main.ml index a866a018c08e6c73d22068674e398415933f8875..ce54a3889e23107ec6dc2aa2e601edda1e63ef65 100644 --- a/src/main.ml +++ b/src/main.ml @@ -93,26 +93,40 @@ let rec chemins s g = List.map (fun b -> if (List.mem s b) then b else s::b) titi else [[s]] + + (* - * [plus_court_chemin l] renvoie la liste des plus courts chemins de la liste de chemins l + * [plus_court_chemin s p c] renvoie la liste des plus courts chemins de s à p de la liste de chemins c *) -let plus_courts_chemins c = - let distances = List.map (fun a -> List.length a) c +let plus_courts_chemins s p c = + let rec filtre f t nl = match nl with + | [] -> [] + | elt::ma -> if (List.nth elt 0) = f && (List.nth elt ((List.length elt)-1)) = t then elt::(filtre f t ma) else (filtre f t ma) in - let minimum = List.fold_left (fun a b -> if (a<b) then a else b) (List.nth distances 0) distances in - print_int minimum ; - let rec remplissage l d = match l, d with + let rec remplissage l d min = match l, d with | [], _ -> [] - | e::m, a::dm -> if a = minimum then (e::(remplissage m dm)) else (remplissage m dm) + | e::m, a::dm -> if a = min then (e::(remplissage m dm min)) else (remplissage m dm min) | _ -> failwith("erreur") in - remplissage c distances + let liste = filtre s p c + in + let distances = List.map (fun a -> List.length a) liste + in + let minimum = List.fold_left (fun a b -> if (a<b) then a else b) (List.nth distances 0) distances + in + remplissage liste distances minimum -(* TODO : ne pas oublier de supprimer les chemins qui n'arrive pas à puits*) +(* TODO : ne pas oublier de supprimer les chemins qui n'arrive pas à puits *) (* test du dénombrement de l'ensemble des chemins possibles *) let _ = - Printf.printf "Chemins possibles : \n" ; + Printf.printf "Chemins les plus courts : \n" ; let f l = Printf.printf "%s\n" (String.concat " " l) in - List.map f (plus_courts_chemins (chemins source (make_graphe (int_of_string n)))) + let graphe_test = make_graphe (int_of_string n) + in + let liste_chemins = chemins source graphe_test + in + let liste_result = plus_courts_chemins source puits liste_chemins + in + List.map f liste_result