Advertisement
Guest User

Untitled

a guest
Jan 9th, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 1.37 KB | None | 0 0
  1.  
  2. exception Cykliczne
  3.  
  4. let topol graf =
  5.   let przegladaj stopien krawedzie =
  6.     let sprawdzczyzerowy wierzcholek zerowe =
  7.       if find wierzcholek stopien = 0 then
  8.         zerowe := wierzcholek :: !zerowe in
  9.     let powieksz wierzcholek =
  10.       add wierzcholek (find wierzcholek stopien + 1) stopien in
  11.     let zmniejsz wierzcholek zerowe =
  12.       add wierzcholek (find wierzcholek stopien - 1) stopien;
  13.       sprawdzczyzerowy wierzcholek in
  14.     let dotknij wierzcholek =
  15.       if mem wierzcholek stopien = false then
  16.         add wierzcholek 0 stopien in
  17.     let przetworz (aktualny, listakrawedzi) =
  18.       add aktualny listakrawedzi krawedzie;
  19.       List.iter dotknijwierzcholek listakrawedzi;
  20.       List.iter powiekszwierzcholek listakrawedzi in
  21.     let usun wierzcholek zerowe posortowane =
  22.       posortowane := wierzcholek :: !posortowane;
  23.       List.iter (function x -> zmniejsz x zerowe) (find wierzcholek krawedzie) in
  24.     let sort = ref [];
  25.     let zero = ref [];
  26.     let aktualny = ref (fst (List.hd graf));
  27.     iter przetworz graf;
  28.     iter (fun x y -> sprawdzczyzerowy x zero) stopien;
  29.     while (!zero <> [])
  30.     begin
  31.       aktualny := (List.hd !zero);
  32.       zero := List.tl !zero;
  33.       usun !aktualny zero sort
  34.     end;
  35.     if List.length !sort < List.length graf then
  36.       raise Cykliczne;
  37.     List.rev !sort in
  38.   przegladaj Empty Empty
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement