diff --git a/a.out b/a.out index 65a0cac..a628ac9 100755 Binary files a/a.out and b/a.out differ diff --git a/pretty_printing.cmi b/pretty_printing.cmi index 5fd8bdc..b63f5c6 100644 Binary files a/pretty_printing.cmi and b/pretty_printing.cmi differ diff --git a/pretty_printing.cmo b/pretty_printing.cmo index 0714f1d..23be77a 100644 Binary files a/pretty_printing.cmo and b/pretty_printing.cmo differ diff --git a/pretty_printing.ml b/pretty_printing.ml index 5bd08db..f75387c 100644 --- a/pretty_printing.ml +++ b/pretty_printing.ml @@ -399,7 +399,7 @@ let draw_integer x0 y n0 r = let len = r/3 in let offset = size*(len/2) in for i = 0 to size do - let x = -(1 - delta size 0)*4 + x0 - offset + i * (len+8) in + let x = x0 - (-(1 - delta size 0)*8 - offset + i * (len+8)) in if Array.mem (!n mod 10) [|0; 4; 5; 6; 7; 8; 9|] then draw_poly_line [|(x-len/2, y+len); (x-len/2, y)|]; @@ -478,25 +478,38 @@ let even_more_pretty_printing t r ystep skip = graphdata ;; -let generate_full_graph d = +let generate_full_tree d = let rec aux n = match n with - | 0 -> Leaf (Random.int 99) + | 0 -> Leaf (Random.int 1000) | k -> begin - Node (Random.int 99, aux (n-1), aux (n-1)) + Node (Random.int 1000, aux (n-1), aux (n-1)) end in aux d ;; +let generate_some_tree maxd nodechance leafchance = + let rec aux n = match n with + | 0 -> if (Random.int 101 < leafchance) then Leaf (Random.int 100) else Empty + | k -> begin + match Random.int 101 with + | k when k <= nodechance -> Node (Random.int 1000, aux (n-1), aux (n-1)) + | k -> if (Random.int 101 < leafchance) then Leaf (Random.int 1000) else Empty + end + in aux maxd ;; + let rec nth l n = match l with | [] -> failwith "Out of range" | h::t when n = 0 -> h | h::t -> nth t (n-1) ;; let even_more_fancy_dfs_prefixe t graphdata r tts rfound gfound bfound rmark gmark bmark = - let rec aux tr dpth os = + let d = depth_of_tree t in + let count_per_depth = Array.make d 0 in + let rec aux tr dpth = match tr with | Empty -> () | Leaf _ -> begin - let data = nth graphdata.(dpth) os in + let data = nth graphdata.(dpth) (List.length graphdata.(dpth) - count_per_depth.(dpth) - 1) in + count_per_depth.(dpth) <- count_per_depth.(dpth) + 1; set_color (rgb rfound gfound bfound); draw_circle (fst (snd data)) (snd (snd data)) r; Unix.sleepf tts; @@ -504,17 +517,18 @@ let even_more_fancy_dfs_prefixe t graphdata r tts rfound gfound bfound rmark gma draw_circle (fst (snd data)) (snd (snd data)) r; end | Node (_, g, d) -> begin - let data = nth graphdata.(dpth) os in + let data = nth graphdata.(dpth) (List.length graphdata.(dpth) - count_per_depth.(dpth) - 1) in + count_per_depth.(dpth) <- count_per_depth.(dpth) + 1; set_color (rgb rfound gfound bfound); draw_circle (fst (snd data)) (snd (snd data)) r; Unix.sleepf tts; set_color (rgb rmark gmark bmark); draw_circle (fst (snd data)) (snd (snd data)) r; - aux g (dpth+1) (2*os); - aux g (dpth+1) (2*os + 1); + aux g (dpth+1); + aux d (dpth+1); end - in aux t 0 0 ;; + in aux t 0 ;; let even_more_fancy_dfs_infixe t graphdata r tts rfound gfound bfound rmark gmark bmark = @@ -522,7 +536,7 @@ let even_more_fancy_dfs_infixe t graphdata r tts rfound gfound bfound rmark gmar match tr with | Empty -> () | Leaf _ -> begin - let data = nth graphdata.(dpth) os in + let data = nth graphdata.(dpth) (List.length graphdata.(dpth) - os - 1) in set_color (rgb rfound gfound bfound); draw_circle (fst (snd data)) (snd (snd data)) r; Unix.sleepf tts; @@ -532,13 +546,14 @@ let even_more_fancy_dfs_infixe t graphdata r tts rfound gfound bfound rmark gmar | Node (_, g, d) -> begin aux g (dpth+1) (2*os); - let data = nth graphdata.(dpth) os in + let data = nth graphdata.(dpth) (List.length graphdata.(dpth) - os - 1) in set_color (rgb rfound gfound bfound); draw_circle (fst (snd data)) (snd (snd data)) r; Unix.sleepf tts; set_color (rgb rmark gmark bmark); draw_circle (fst (snd data)) (snd (snd data)) r; - aux g (dpth+1) (2*os + 1); + + aux d (dpth+1) (2*os + 1); end in aux t 0 0 ;; @@ -548,7 +563,7 @@ let even_more_fancy_dfs_postfixe t graphdata r tts rfound gfound bfound rmark gm match tr with | Empty -> () | Leaf _ -> begin - let data = nth graphdata.(dpth) os in + let data = nth graphdata.(dpth) (List.length graphdata.(dpth) - os - 1) in set_color (rgb rfound gfound bfound); draw_circle (fst (snd data)) (snd (snd data)) r; Unix.sleepf tts; @@ -557,9 +572,9 @@ let even_more_fancy_dfs_postfixe t graphdata r tts rfound gfound bfound rmark gm end | Node (_, g, d) -> begin aux g (dpth+1) (2*os); - aux g (dpth+1) (2*os + 1); + aux d (dpth+1) (2*os + 1); - let data = nth graphdata.(dpth) os in + let data = nth graphdata.(dpth) (List.length graphdata.(dpth) - os - 1) in set_color (rgb rfound gfound bfound); draw_circle (fst (snd data)) (snd (snd data)) r; Unix.sleepf tts; @@ -574,9 +589,11 @@ Random.self_init ;; open_graph " 1800x800" ;; set_window_title "Trees" ;; -let gdata = even_more_pretty_printing (generate_full_graph 4) 40 150 false ;; +let tt = generate_some_tree 4 100 75 ;; -even_more_fancy_dfs_prefixe (generate_full_graph 4) gdata 40 0.2 255 255 32 32 32 255 ;; +let gdata = even_more_pretty_printing tt 40 150 false ;; + +even_more_fancy_dfs_prefixe tt gdata 40 0.2 255 255 32 32 32 255 ;; close_graph () ;;