Skip to content
Extraits de code Groupes Projets
Valider 73412481 rédigé par Loïc Wikle DUBARD's avatar Loïc Wikle DUBARD
Parcourir les fichiers

chemins les plus courts terminés

parent c5872669
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -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 *)
(* 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
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter