open Graph type path = id list (*type record avec id noeud et son cout*) type t_cost={ mutable cout:int; mutable father:int } let blf gr id_src id_dest= (*je compte le nb de noeuds dans le graphe pour instancier mon tableau*) let nb_n=n_fold gr (fun acu id->acu+1) 0 in let cost ={cout=max_int; father=(-1)} in let acu =Array.make nb_n cost in (*je fais un fold_left pour pouvoir individualiser au niveau de la mémoire les cases de la table*) let blf_tab=n_fold gr (fun acu id->acu.(id)<-{cout=max_int; father=(-1)}; acu ) acu in blf_tab.(id_src).cout<-0; let file_id=[id_src] in let file_marque =[] in let rec blf_rec gr file_id file_marque= match file_id with |[]-> blf_tab |a::b-> let l_out_arc=out_arcs gr a in let rec loop_suc l_out_arc blf_tab file = match l_out_arc with |[]-> blf_rec gr file (a::file_marque) |(id,label)::d-> if label != 0 && (blf_tab.(a).cout+label)None |a->if a == id_src then Some (id_src::path) else loop (a::path) blf_tab id_src a in loop path blf_tab id_src id_dest