blf et get_path

Bu işleme şunda yer alıyor:
Leonie Gallois 2020-11-15 12:34:53 +01:00
ebeveyn 74142977d9
işleme 5a5093cd5e

Dosyayı Görüntüle

@ -15,25 +15,27 @@ let blf gr id_src id_dest=
let acu =Array.make nb_n cost 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*) (*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 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_id=[id_src] in
let file_marque =[] in
let rec blf_rec gr file_id = match file_id with let rec blf_rec gr file_id file_marque= match file_id with
|[]-> blf_tab |[]-> blf_tab
|a::b-> |a::b->
let l_out_arc=out_arcs gr a in let l_out_arc=out_arcs gr a in
let rec loop_suc file_id l_out_arc blf_tab=match l_out_arc with let rec loop_suc l_out_arc blf_tab file =
|[]-> blf_rec gr b match l_out_arc with
|[]-> blf_rec gr file (a::file_marque)
|(id,label)::d-> |(id,label)::d->
if label != 0 && (blf_tab.(a).cout+label)<blf_tab.(id).cout then if label != 0 && (blf_tab.(a).cout+label)<blf_tab.(id).cout then
begin begin
blf_tab.(id).cout<-(blf_tab.(a).cout+label); blf_tab.(id).cout<-(blf_tab.(a).cout+label);
blf_tab.(id).father<-a; blf_tab.(id).father<-a;
if not (List.mem id file_id ) then loop_suc (List.append file_id [id]) d blf_tab else loop_suc file_id d blf_tab if not (List.mem id file_marque) then loop_suc d blf_tab (id::file) else loop_suc d blf_tab file
end end
else loop_suc file_id d blf_tab in else loop_suc d blf_tab file in
loop_suc file_id l_out_arc blf_tab in loop_suc l_out_arc blf_tab b in
blf_rec gr file_id blf_rec gr file_id file_marque
(*avec blf_tab, on retrace chemin avec les pères*) (*avec blf_tab, on retrace chemin avec les pères*)
let get_path gr id_src id_dest= let get_path gr id_src id_dest=