diff --git a/a.out b/a.out index a628ac9..82db9a0 100755 Binary files a/a.out and b/a.out differ diff --git a/graphs.cmi b/graphs.cmi new file mode 100644 index 0000000..a66da93 Binary files /dev/null and b/graphs.cmi differ diff --git a/graphs.cmo b/graphs.cmo new file mode 100644 index 0000000..57911ca Binary files /dev/null and b/graphs.cmo differ diff --git a/graphs.ml b/graphs.ml new file mode 100644 index 0000000..b2e07f2 --- /dev/null +++ b/graphs.ml @@ -0,0 +1,106 @@ +open Graphics ;; + +let pi = 3.14159265358979343 ;; + +let rec ln10 n = match n with + | k when k < 0 -> failwith "Are you sure about that ?" + | k when k < 10 -> 0 + | k -> 1 + ln10 (k/10) ;; + +let delta i j = + if i = j then 1 else 0 ;; + +let draw_integer x0 y n0 r = + (* 7-seg display *) + let n = ref n0 in + let size = ln10 n0 in + let len = r/3 in + let offset = size*(len/2) in + for i = 0 to size do + 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)|]; + + if Array.mem (!n mod 10) [|0; 2; 3; 5; 6; 7; 8; 9|] then + draw_poly_line [|(x-len/2, y+len); (x+len/2, y+len)|]; + + if Array.mem (!n mod 10) [|0; 1; 2; 3; 4; 7; 8; 9|] then + draw_poly_line [|(x+len/2, y+len); (x+len/2, y)|]; + + if Array.mem (!n mod 10) [|2; 3; 4; 5; 6; 8; 9|] then + draw_poly_line [|(x-len/2, y); (x+len/2, y)|]; + + if Array.mem (!n mod 10) [|0; 1; 3; 4; 5; 6; 7; 8; 9|] then + draw_poly_line [|(x+len/2, y-len); (x+len/2, y)|]; + + if Array.mem (!n mod 10) [|0; 2; 3; 5; 6; 8; 9|] then + draw_poly_line [|(x-len/2, y-len); (x+len/2, y-len)|]; + + if Array.mem (!n mod 10) [|0; 2; 6; 8|] then + draw_poly_line [|(x-len/2, y-len); (x-len/2, y)|]; + + n := !n/10; + done ;; + +let identity n = n ;; + +let improved_pretty_printing g wd ht r = + let n = Array.length g in + let coords = Array.make n (0, 0) in + + let colors = Array.make n (rgb 0 0 0) in + for i = 0 to n-1 do + colors.(i) <- rgb ((255 * i) / n) ((255*(i+n/3)) / n) ((255*(2*i+n/3)) / n) + done; + + for k = 0 to n-1 do + let theta = 2. *. pi *. (float_of_int k) /. (float_of_int (n)) +. pi /. (float_of_int (n)) in + let i = ref (int_of_float ((float_of_int wd) /. 2.) + int_of_float ((float_of_int wd) /. 2.2 *. cos theta)) in + let j = ref (int_of_float ((float_of_int ht) /. 2.) + int_of_float ((float_of_int ht) /. 2.2 *. sin theta)) in + set_line_width 8 ; + set_color colors.(k) ; + draw_circle !i !j r; + coords.(k) <- (!i, !j) + done ; + + for k = 0 to n-1 do + set_color colors.(k) ; + for l = 0 to (Array.length g.(k))-1 do + draw_poly_line [|coords.(k); coords.(g.(k).(l))|]; + done + done; + + set_line_width 22 ; + for k = 0 to n-1 do + set_color colors.(k) ; + for l = 0 to (Array.length g.(k))-1 do + let slope = Float.atan2 (float_of_int (snd coords.(g.(k).(l)) - snd coords.(k))) (float_of_int (fst coords.(g.(k).(l)) - fst coords.(k))) in + + let nexi = int_of_float (float_of_int (fst coords.(k)) +. (float_of_int r) *. 1.5 *. cos slope) in + let nexj = int_of_float (float_of_int (snd coords.(k)) +. (float_of_int r) *. 1.5 *. sin slope) in + draw_poly_line [|coords.(k); (nexi, nexj)|] + done + done; + + for k = 0 to n-1 do + set_line_width 10 ; + set_color black ; + fill_circle (fst coords.(k)) (snd coords.(k)) r; + set_color colors.(k) ; + set_line_width 5 ; + draw_integer (fst coords.(k)) (snd coords.(k)) k r + done; + + ignore (Scanf.bscanf Scanf.Scanning.stdin "%d\n" identity) ;; + + +(* ----------------------- Tests --------------------------- *) + +open_graph " 1200x800" ;; +set_window_title "Graphs" ;; + +let gr = [|[|3; 5; 7|]; [|0|]; [|1; 7; 8|]; [|2; 6|]; [|0; 1; 3|]; [|6; 7|]; [|0; 1; 2|]; [|8|]; [|0; 7; 6|]; [||]; [||]; [|9|]|] ;; + +improved_pretty_printing gr 1200 800 50 ;; + +close_graph () ;; \ No newline at end of file diff --git a/pretty_printing.cmi b/pretty_printing.cmi index b63f5c6..d3dafd2 100644 Binary files a/pretty_printing.cmi and b/pretty_printing.cmi differ diff --git a/pretty_printing.cmo b/pretty_printing.cmo index 23be77a..5c3d666 100644 Binary files a/pretty_printing.cmo and b/pretty_printing.cmo differ diff --git a/pretty_printing.ml b/pretty_printing.ml index f75387c..9872b98 100644 --- a/pretty_printing.ml +++ b/pretty_printing.ml @@ -350,253 +350,4 @@ fancy_dfs gr coords map blank_color_map ;; (* --------------------------------------------------------------------------------------------------------- *) (* --------------------------------------------------------------------------------------------------------- *) (* --------------------------------------------------------------------------------------------------------- *) -open Graphics ;; - -type 'a tree = Empty | Leaf of 'a | Node of 'a * 'a tree * 'a tree ;; - -(* -STRUCT : (digit, xcoord, ycoord) -*) - -let rec pw x n = match n with - | 0 -> 1 - | 1 -> x - | k when k mod 2 = 0 -> let res = pw x (n/2) in res*res - | k -> let res = pw x (n/2) in res*res*x ;; - -let rec depth_of_tree t = match t with - | Leaf _ -> 1 - | Node (_, g, d) -> 1 + max (depth_of_tree g) (depth_of_tree d) - | Empty -> 0;; - -let fill_data te ystep sx sy r = - let depth = depth_of_tree te in - let res = Array.make (depth+1) [] in - let rec aux t cur_x cur_d spacing pcx pcy = match t with - | Node (x, g, d) -> begin - aux g (cur_x - spacing) (cur_d+1) (spacing/2) cur_x (sy - r - 20 - ystep * cur_d); - res.(cur_d) <- (((x, (pcx, pcy)), (cur_x, sy - r - 20 - ystep * cur_d)))::(res.(cur_d)); - aux d (cur_x + spacing) (cur_d+1) (spacing/2) cur_x (sy - r - 20 - ystep * cur_d); - end - | Leaf x -> begin - res.(cur_d) <- (((x, (pcx, pcy)), (cur_x, sy - r - ystep * cur_d)))::(res.(cur_d)); - end - | Empty -> () - in aux te (sx/2) 0 (r/2 + r * ((pw 2 (depth-1)) - 1)) (-1) (-1); res ;; - -let rec ln10 n = match n with - | k when k < 0 -> failwith "Are you sure about that ?" - | k when k < 10 -> 0 - | k -> 1 + ln10 (k/10) ;; - -let delta i j = - if i = j then 1 else 0 ;; - -let draw_integer x0 y n0 r = - (* 7-seg display *) - let n = ref n0 in - let size = ln10 n0 in - let len = r/3 in - let offset = size*(len/2) in - for i = 0 to size do - 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)|]; - - if Array.mem (!n mod 10) [|0; 2; 3; 5; 6; 7; 8; 9|] then - draw_poly_line [|(x-len/2, y+len); (x+len/2, y+len)|]; - - if Array.mem (!n mod 10) [|0; 1; 2; 3; 4; 7; 8; 9|] then - draw_poly_line [|(x+len/2, y+len); (x+len/2, y)|]; - - if Array.mem (!n mod 10) [|2; 3; 4; 5; 6; 8; 9|] then - draw_poly_line [|(x-len/2, y); (x+len/2, y)|]; - - if Array.mem (!n mod 10) [|0; 1; 3; 4; 5; 6; 7; 8; 9|] then - draw_poly_line [|(x+len/2, y-len); (x+len/2, y)|]; - - if Array.mem (!n mod 10) [|0; 2; 3; 5; 6; 8; 9|] then - draw_poly_line [|(x-len/2, y-len); (x+len/2, y-len)|]; - - if Array.mem (!n mod 10) [|0; 2; 6; 8|] then - draw_poly_line [|(x-len/2, y-len); (x-len/2, y)|]; - - n := !n/10; - done ;; - -let rec draw_list l d r = match l with - | [] -> () - | h::t -> begin - set_color (rgb 192 192 192); - fill_circle (fst (snd h)) (snd (snd h)) r; - set_color black; - draw_circle (fst (snd h)) (snd (snd h)) r; - moveto (fst (snd h)) (snd (snd h)); - set_color (rgb 32 192 32); - draw_integer (fst (snd h)) (snd (snd h)) (fst (fst h)) r; - draw_list t d r - end;; - -let connect l0 = - let rec aux l = match l with - | [] -> () - | ((_, (xf, yf)), (x, y))::t -> - if xf >= 0 && yf >= 0 then begin - set_color (rgb 192 192 192); - draw_poly_line [|(xf, yf); (x, y)|]; - aux t - end - in aux l0 ;; - -let even_more_pretty_printing t r ystep skip = - - let sx = Graphics.size_x () in - let sy = Graphics.size_y () in - - let graphdata = fill_data t ystep sx sy (6*r/10) in - (* graphdata is a ((int * (int * int)) * (int * int)) list array *) - (* <==> ((value, (parent_x, parent_y)), (this_x, this_y)) *) - if skip = false then begin - set_color (rgb 192 192 192); - set_line_width 15 ; - for dpth = 1 to (Array.length graphdata -1) do - connect graphdata.(dpth-1); - done; - - set_line_width 5 ; - for dpth = 0 to (Array.length graphdata -1) do - draw_list graphdata.(dpth) dpth r - done; - - let halt = ref false in - while !halt = false do - Unix.sleepf 0.1 ; - Unix.sleepf 2.0 ; - halt := true; - done; - end; - graphdata ;; - - -let generate_full_tree d = - let rec aux n = match n with - | 0 -> Leaf (Random.int 1000) - | k -> begin - 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 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) (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; - end - | Node (_, g, d) -> begin - 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); - aux d (dpth+1); - end - in aux t 0 ;; - - -let even_more_fancy_dfs_infixe t graphdata r tts rfound gfound bfound rmark gmark bmark = - let rec aux tr dpth os = - match tr with - | Empty -> () - | Leaf _ -> begin - 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; - end - | Node (_, g, d) -> begin - aux g (dpth+1) (2*os); - - 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 d (dpth+1) (2*os + 1); - end - in aux t 0 0 ;; - - -let even_more_fancy_dfs_postfixe t graphdata r tts rfound gfound bfound rmark gmark bmark = - let rec aux tr dpth os = - match tr with - | Empty -> () - | Leaf _ -> begin - 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; - end - | Node (_, g, d) -> begin - aux g (dpth+1) (2*os); - aux d (dpth+1) (2*os + 1); - - 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; - end - in aux t 0 0 ;; - -(* --------------------------------------| TESTS |-------------------------------------- *) -Random.self_init ;; - -open_graph " 1800x800" ;; -set_window_title "Trees" ;; - -let tt = generate_some_tree 4 100 75 ;; - -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 () ;; - -(* compilation command : ocamlfind ocamlc -linkpkg -package unix -linkpkg -package graphics pretty_printing.ml *) -print_int 0 ;; -print_char '\n' ;; \ No newline at end of file +(* compilation command : ocamlfind ocamlc -linkpkg -package unix -linkpkg -package graphics trees.ml *) \ No newline at end of file diff --git a/trees.cmi b/trees.cmi new file mode 100644 index 0000000..91da438 Binary files /dev/null and b/trees.cmi differ diff --git a/trees.cmo b/trees.cmo new file mode 100644 index 0000000..2e95b0d Binary files /dev/null and b/trees.cmo differ diff --git a/trees.ml b/trees.ml new file mode 100644 index 0000000..93f3162 --- /dev/null +++ b/trees.ml @@ -0,0 +1,250 @@ +open Graphics ;; + +type 'a tree = Empty | Leaf of 'a | Node of 'a * 'a tree * 'a tree ;; + +(* +STRUCT : (digit, xcoord, ycoord) +*) + +let rec pw x n = match n with + | 0 -> 1 + | 1 -> x + | k when k mod 2 = 0 -> let res = pw x (n/2) in res*res + | k -> let res = pw x (n/2) in res*res*x ;; + +let rec depth_of_tree t = match t with + | Leaf _ -> 1 + | Node (_, g, d) -> 1 + max (depth_of_tree g) (depth_of_tree d) + | Empty -> 0;; + +let fill_data te ystep sx sy r = + let depth = depth_of_tree te in + let res = Array.make (depth+1) [] in + let rec aux t cur_x cur_d spacing pcx pcy = match t with + | Node (x, g, d) -> begin + aux g (cur_x - spacing) (cur_d+1) (spacing/2) cur_x (sy - r - 20 - ystep * cur_d); + res.(cur_d) <- (((x, (pcx, pcy)), (cur_x, sy - r - 20 - ystep * cur_d)))::(res.(cur_d)); + aux d (cur_x + spacing) (cur_d+1) (spacing/2) cur_x (sy - r - 20 - ystep * cur_d); + end + | Leaf x -> begin + res.(cur_d) <- (((x, (pcx, pcy)), (cur_x, sy - r - ystep * cur_d)))::(res.(cur_d)); + end + | Empty -> () + in aux te (sx/2) 0 (r/2 + r * ((pw 2 (depth-1)) - 1)) (-1) (-1); res ;; + +let rec ln10 n = match n with + | k when k < 0 -> failwith "Are you sure about that ?" + | k when k < 10 -> 0 + | k -> 1 + ln10 (k/10) ;; + +let delta i j = + if i = j then 1 else 0 ;; + +let draw_integer x0 y n0 r = + (* 7-seg display *) + let n = ref n0 in + let size = ln10 n0 in + let len = r/3 in + let offset = size*(len/2) in + for i = 0 to size do + 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)|]; + + if Array.mem (!n mod 10) [|0; 2; 3; 5; 6; 7; 8; 9|] then + draw_poly_line [|(x-len/2, y+len); (x+len/2, y+len)|]; + + if Array.mem (!n mod 10) [|0; 1; 2; 3; 4; 7; 8; 9|] then + draw_poly_line [|(x+len/2, y+len); (x+len/2, y)|]; + + if Array.mem (!n mod 10) [|2; 3; 4; 5; 6; 8; 9|] then + draw_poly_line [|(x-len/2, y); (x+len/2, y)|]; + + if Array.mem (!n mod 10) [|0; 1; 3; 4; 5; 6; 7; 8; 9|] then + draw_poly_line [|(x+len/2, y-len); (x+len/2, y)|]; + + if Array.mem (!n mod 10) [|0; 2; 3; 5; 6; 8; 9|] then + draw_poly_line [|(x-len/2, y-len); (x+len/2, y-len)|]; + + if Array.mem (!n mod 10) [|0; 2; 6; 8|] then + draw_poly_line [|(x-len/2, y-len); (x-len/2, y)|]; + + n := !n/10; + done ;; + +let rec draw_list l d r = match l with + | [] -> () + | h::t -> begin + set_color (rgb 192 192 192); + fill_circle (fst (snd h)) (snd (snd h)) r; + set_color black; + draw_circle (fst (snd h)) (snd (snd h)) r; + moveto (fst (snd h)) (snd (snd h)); + set_color (rgb 32 192 32); + draw_integer (fst (snd h)) (snd (snd h)) (fst (fst h)) r; + draw_list t d r + end;; + +let connect l0 = + let rec aux l = match l with + | [] -> () + | ((_, (xf, yf)), (x, y))::t -> + if xf >= 0 && yf >= 0 then begin + set_color (rgb 192 192 192); + draw_poly_line [|(xf, yf); (x, y)|]; + aux t + end + in aux l0 ;; + +let even_more_pretty_printing t r ystep skip = + + let sx = Graphics.size_x () in + let sy = Graphics.size_y () in + + let graphdata = fill_data t ystep sx sy (6*r/10) in + (* graphdata is a ((int * (int * int)) * (int * int)) list array *) + (* <==> ((value, (parent_x, parent_y)), (this_x, this_y)) *) + if skip = false then begin + set_color (rgb 192 192 192); + set_line_width 15 ; + for dpth = 1 to (Array.length graphdata -1) do + connect graphdata.(dpth-1); + done; + + set_line_width 5 ; + for dpth = 0 to (Array.length graphdata -1) do + draw_list graphdata.(dpth) dpth r + done; + + let halt = ref false in + while !halt = false do + Unix.sleepf 0.1 ; + Unix.sleepf 2.0 ; + halt := true; + done; + end; + graphdata ;; + + +let generate_full_tree d = + let rec aux n = match n with + | 0 -> Leaf (Random.int 1000) + | k -> begin + 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 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) (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; + end + | Node (_, g, d) -> begin + 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); + aux d (dpth+1); + end + in aux t 0 ;; + + +let even_more_fancy_dfs_infixe t graphdata r tts rfound gfound bfound rmark gmark bmark = + let rec aux tr dpth os = + match tr with + | Empty -> () + | Leaf _ -> begin + 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; + end + | Node (_, g, d) -> begin + aux g (dpth+1) (2*os); + + 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 d (dpth+1) (2*os + 1); + end + in aux t 0 0 ;; + + +let even_more_fancy_dfs_postfixe t graphdata r tts rfound gfound bfound rmark gmark bmark = + let rec aux tr dpth os = + match tr with + | Empty -> () + | Leaf _ -> begin + 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; + end + | Node (_, g, d) -> begin + aux g (dpth+1) (2*os); + aux d (dpth+1) (2*os + 1); + + 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; + end + in aux t 0 0 ;; + +(* --------------------------------------| TESTS |-------------------------------------- *) +Random.self_init ;; + +open_graph " 1800x800" ;; +set_window_title "Trees" ;; + +let tt = generate_some_tree 4 100 75 ;; + +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 () ;; + +(* compilation command : ocamlfind ocamlc -linkpkg -package unix -linkpkg -package graphics trees.ml *) +print_int 0 ;; +print_char '\n' ;; \ No newline at end of file