Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (*autor: Wiktor Chmielewski grupa 5*)
- (*code review: Mikołaj Uzarski grupa 5*)
- open PMap;;
- exception Cykliczne;;
- type stan = Odwiedzony | Nieodwiedzony | Przetwarzany;;
- let topol lst =
- (* przetwarzamy listę sąsiedztwa w mapę *)
- let mapa = ref (List.fold_left (fun acc (v, lista) ->
- let (stan, last) =
- try find v acc
- with Not_found -> (ref Nieodwiedzony, [])
- in add v (stan, last @ lista) acc) empty lst)
- and wynik = ref [] in
- let rec odwiedz v (stan, l) =
- if !stan = Przetwarzany then raise Cykliczne
- else if !stan = Nieodwiedzony then begin
- stan := Przetwarzany;
- List.iter (fun x -> if mem x !mapa then odwiedz x (find x !mapa) else begin
- wynik := x :: (!wynik);
- mapa := add x (ref Odwiedzony, []) !mapa
- end) l;
- stan := Odwiedzony;
- wynik := v :: (!wynik)
- end in iter odwiedz !mapa;
- !wynik
- ;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement