diff --git a/a.out b/a.out index 6f84fb8..eb47f97 100755 Binary files a/a.out and b/a.out differ diff --git a/graphs.cmi b/graphs.cmi index 441676d..825d4a2 100644 Binary files a/graphs.cmi and b/graphs.cmi differ diff --git a/graphs.cmo b/graphs.cmo index f1e8a14..816da52 100644 Binary files a/graphs.cmo and b/graphs.cmo differ diff --git a/graphs.ml b/graphs.ml index a8bfb8e..2ae1e0f 100644 --- a/graphs.ml +++ b/graphs.ml @@ -5,7 +5,7 @@ open Graphics ;; - main function : 68 - 120 - type 2 printing: 122 - 270 - DFS : 275 - 530 (yes the function is that big) - +- BFS : 532 - 727 @@ -31,7 +31,7 @@ let draw_integer x0 y n0 r = let n = ref n0 in let size = ln10 n0 in let len = r/3 in - let offset = size*(len/2) in + let offset = (size-1)*(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 @@ -134,7 +134,12 @@ let generate_type2_graph w h freq inf sup = let weighted_d100 i = let res = Random.int 100 in - if res <= freq then res else (-1) + if res <= freq then + try + (inf + Random.int (sup-inf)) + with + | Invalid_argument _ -> inf + else (-1) in let gr = {width = w ; height = h ; g = Array.make w [||]} in @@ -147,7 +152,7 @@ let generate_type2_graph w h freq inf sup = gr ;; -let another_type_of_graph_printing (gr : type2graph) r d = +let another_type_of_graph_printing (gr : type2graph) r d is_weighted = let colors = Array.make_matrix gr.width gr.height (rgb 0 0 0) in for i = 0 to gr.width -1 do for j = 0 to gr.height -1 do @@ -214,41 +219,133 @@ let another_type_of_graph_printing (gr : type2graph) r d = done done; + let roff = (6*r)/5 in + let roff2 = (7*r)/5 in + let rsize = (3*r)/4 in + let wcolor = rgb 32 255 32 in + set_line_width 8; for i = 0 to gr.width -1 do for j = 0 to gr.height -1 do - set_color colors.(i).(j) ; let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *) - draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ; + if is_weighted then begin + set_color white; + fill_circle (fst node_xy - roff) (snd node_xy - roff) (3*rsize/4) ; + set_color wcolor; + set_line_width 3; + draw_integer (fst node_xy - roff) (snd node_xy - roff) gr.g.(i).(j).edges.(0) rsize; + end + else begin + set_line_width 8; + set_color colors.(i).(j) ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ; + end end; if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) then begin (* O *) - draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|] ; + if is_weighted then begin + set_color white; + fill_circle (fst node_xy - roff2) (snd node_xy) (3*rsize/4) ; + set_color wcolor; + set_line_width 3; + draw_integer (fst node_xy - roff2) (snd node_xy) gr.g.(i).(j).edges.(1) rsize; + end + else begin + set_line_width 8; + set_color colors.(i).(j) ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|] ; + end end; if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) then begin (* NO *) - draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ; + if is_weighted then begin + set_color white; + fill_circle (fst node_xy - roff) (snd node_xy + roff) (3*rsize/4) ; + set_color wcolor; + set_line_width 3; + draw_integer (fst node_xy - roff) (snd node_xy + roff) gr.g.(i).(j).edges.(2) rsize; + end + else begin + set_line_width 8; + set_color colors.(i).(j) ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ; + end end; if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) then begin (* N *) - draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ; + if is_weighted then begin + set_color white; + fill_circle (fst node_xy) (snd node_xy + roff2) (3*rsize/4) ; + set_color wcolor; + set_line_width 3; + draw_integer (fst node_xy) (snd node_xy + roff2) gr.g.(i).(j).edges.(3) rsize; + end + else begin + set_line_width 8; + set_color colors.(i).(j) ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ; + end end; if (i < gr.width-1 && j < gr.height -1) && gr.g.(i).(j).edges.(4) <> (-1) then begin (* NE *) - draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ; + if is_weighted then begin + set_color white; + fill_circle (fst node_xy + roff) (snd node_xy + roff) (3*rsize/4) ; + set_color wcolor; + set_line_width 3; + draw_integer (fst node_xy + roff) (snd node_xy + roff) gr.g.(i).(j).edges.(4) rsize; + end + else begin + set_line_width 8; + set_color colors.(i).(j) ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|] ; + end end; if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) then begin (* E *) - draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|] ; + if is_weighted then begin + set_color white; + fill_circle (fst node_xy + roff2) (snd node_xy) (3*rsize/4) ; + set_color wcolor; + set_line_width 3; + draw_integer (fst node_xy + roff2) (snd node_xy) gr.g.(i).(j).edges.(5) rsize; + end + else begin + set_line_width 8; + set_color colors.(i).(j) ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|] ; + end end; if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) then begin (* SE *) - draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ; + if is_weighted then begin + set_color white; + fill_circle (fst node_xy + roff) (snd node_xy - roff) (3*rsize/4) ; + set_color wcolor; + set_line_width 3; + draw_integer (fst node_xy + roff) (snd node_xy - roff) gr.g.(i).(j).edges.(6) rsize; + end + else begin + set_line_width 8; + set_color colors.(i).(j) ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ; + end end; if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) then begin (* S *) - draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ; + if is_weighted then begin + set_color white; + fill_circle (fst node_xy) (snd node_xy - roff2) (3*rsize/4) ; + set_color wcolor; + set_line_width 3; + draw_integer (fst node_xy) (snd node_xy - roff2) gr.g.(i).(j).edges.(7) rsize; + end + else begin + set_line_width 8; + set_color colors.(i).(j) ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|] ; + end end; done @@ -735,11 +832,11 @@ let another_type_of_bfs (gr : type2graph) r d = open_graph " 1200x800" ;; set_window_title "Graphs" ;; -let type2 = generate_type2_graph 8 6 40 1 1 ;; +let type2 = generate_type2_graph 7 5 40 1 10 ;; -(*another_type_of_graph_printing type2 35 75 ;;*) +another_type_of_graph_printing type2 35 100 true ;; (*another_type_of_dfs type2 35 75 ;;*) -another_type_of_bfs type2 35 75 ;; +(*another_type_of_bfs type2 35 75 ;;*) close_graph () ;;