Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- exception Cykliczne
- let topol graf =
- let przegladaj stopien krawedzie =
- let sprawdzczyzerowy wierzcholek zerowe =
- if find wierzcholek stopien = 0 then
- zerowe := wierzcholek :: !zerowe in
- let powieksz wierzcholek =
- add wierzcholek (find wierzcholek stopien + 1) stopien in
- let zmniejsz wierzcholek zerowe =
- add wierzcholek (find wierzcholek stopien - 1) stopien;
- sprawdzczyzerowy wierzcholek in
- let dotknij wierzcholek =
- if mem wierzcholek stopien = false then
- add wierzcholek 0 stopien in
- let przetworz (aktualny, listakrawedzi) =
- add aktualny listakrawedzi krawedzie;
- List.iter dotknijwierzcholek listakrawedzi;
- List.iter powiekszwierzcholek listakrawedzi in
- let usun wierzcholek zerowe posortowane =
- posortowane := wierzcholek :: !posortowane;
- List.iter (function x -> zmniejsz x zerowe) (find wierzcholek krawedzie) in
- let sort = ref [];
- let zero = ref [];
- let aktualny = ref (fst (List.hd graf));
- iter przetworz graf;
- iter (fun x y -> sprawdzczyzerowy x zero) stopien;
- while (!zero <> [])
- begin
- aktualny := (List.hd !zero);
- zero := List.tl !zero;
- usun !aktualny zero sort
- end;
- if List.length !sort < List.length graf then
- raise Cykliczne;
- List.rev !sort in
- przegladaj Empty Empty
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement