Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let safe_find k m =
- try find k m with
- Not_found -> 0;;
- let add_v_count in_map (ver, v_list) =
- add ver (safe_find ver in_map) (List.fold_left (fun acc v -> (add v (1 + safe_find v acc) acc)) in_map v_list);;
- let f (acc_zero, acc_map) v =
- let in_num = find v acc_map in
- ((if in_num = 1 then v::acc_zero else acc_zero), (add v (in_num - 1) acc_map))
- let topol l =
- let out_map, in_map = List.fold_left (fun (o_acc, i_acc) (ver, v_list) ->( add ver v_list o_acc, add_v_count i_acc (ver, v_list))) (empty, empty) l in
- let zero_in = foldi (fun v v_list acc -> match v_list with 0 -> v::acc | _ -> acc) in_map in
- let rec remove_vertex o_map i_map zero_i acc =
- match zero_i with
- | [] -> if is_empty o_map then acc
- else raise Cykliczne
- | h::t ->
- let new_zero, new_i_map = List.fold_left (f) (t, i_map) (find h o_map) in
- remove_vertex (remove h o_map) (remove h new_i_map) new_zero h::acc
- in
- List.rev remove_vertex out_map in_map zero_in [];;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement