From e0e60c8f3e49294bbb0254293dc2c63559c35d3a Mon Sep 17 00:00:00 2001 From: Alexandre Date: Wed, 5 Jun 2024 22:40:46 +0200 Subject: [PATCH] User interface + adjustments to display locations --- a.out | Bin 345727 -> 347456 bytes graphs.cmi | Bin 7565 -> 7975 bytes graphs.cmo | Bin 82818 -> 85321 bytes graphs.ml | 338 +++++++++++++++++++++++++++++------------------------ 4 files changed, 183 insertions(+), 155 deletions(-) diff --git a/a.out b/a.out index 3b127e87e6b66d9fc367e96135d8b001f6aeb22e..3abcd31da64c057e9865ca3f3bbf43ef290ec976 100755 GIT binary patch delta 6527 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 u+BZ9#d3Qbi)r1c$11``q{4-DH#4@n8MX zojLp7bM8IQIrp4<&%L*4!_Yw0(26x;jcJ!gXU*r_QBhH~4?G?xlg?_60qaU_TzyfS z$FH<$XuUBXMRYFRx06D^55I<)ez>bLUc(Fk93z=t{GvNluq*p6Q1arY=V zm&pE4HR7^QG*8%8UpMu6$8+@oN?`Y=TDlJX2#YQ)hn<5ExAcQ#Q%F@|kRQNOp#P|LXOXR|9T45OVwm$ypQLuCQO_b!ltU1goMppjO zb!{d)uOSna*R`p&zI2P+e_g90zA;AFxZn%T&$Dx|Wc^G{e8X$Bin%0@%DJUT5c|DE zUM7bcQNSfXrm|jg`yA@*B`OR6RtIz3Lmh?z$O^dnCsd-dvd~0l1a~wd#m)!FAw5K$ zHcmeQzAc94dr!b(b_{YK5}ov(L|>x^^0bqXcgDhDXB;Lr{{-2ilQ7!}ph2Kd+FLiq}(Rtr_%sXfhe$NJZjIVdn%Q155&J zv*6qmEbY=n#0Y_MaOKo+pc=YS5bqv=>WRWCS`yJJRz57B-k%SV*^1CsDPyFJWbtj} z3VP$ao$7)!LC!-Fi9`uS1OT-$i$4zp79lS`1Eqmtxa)Hf$89d;a7(L}!i77?B4TCo z9dwsT?Bsi9({Ncai*ilEr!(u4Nw#HDhY$@q&mCFh5pSvX$Kk`Y|6@0i3u?&XU572L zpTGI*D7&^|HPz-%Bu2R_kYBAMzxF?_d5oHOm|e{{?ClFtBF=0iSJ`SZ z0HG8{sdDy*e#)8ZQ@Am*c`;28BA%B%LOVJAf@VSccnMABua+QOjw1TX=-j5Sd!tXH zuQaG6dygm1Uy5XQJcixdR7^L}-}N}X&W>UPH=Z{wqh+$?QItXhH^=)JjvJ#>!tnDw zYLD-U z*_IWlZ}3x6HcQOn#dsA}%zCj5CYvg8S(aq0|GG3=R( zp0dbP{!nE-0i?b?hlP%?p0aOB;~!1@=96?Y=T>1ucRY!6zI7$sX?hB2s#t|B;Veg~ z8^9SWXePH*!Fyerzl!Q`WomeVQrW*8_Y_^rx0>9%z6OU#%QMK6|5sFKsLtYqr-2pJ z>Us`GdBSR76;@!ogbdDRpVI1l2A=fNpUI9@7>=%PkX5uz#WbE_HP_I>TS2`5oFRX^ zl{(kpA~KM>R?%3le;ON1PY-6<%V<$w)%@r5sX{fCODc)Dq7wU6*N>QQP&G8wpw@G= zFKjCq(TcVGM$}M1L^pS@9WMPfBC1E+u?7{oPacBv%B-f1|F7HMk-8lnuG=>Pfuh=# z*>UXKj;lucgShQhpBI)9s+OjM1V}wYFJ3i@3f_6~s1%MJlqBBPD+=3NuT zi3GvUMrsV7Sck+A*}R(;3ARL=Y+TihzNRm=cyALfI78$eO_U|Lexu1EE1PMm5JMQF zv)(Nq(tL^rn#4OY`a@bR z#Gkn4G))nI<^!i`vUr!TpQh=ektcoxZnwPuBRZjpJ)ChCLES4~JWF#->?@;miN%1c zZ!`b<93oY5fu?fPIn4PlO0Z4r3(J%EmGi2){sW;&IZtU~Kj)pNm&JkJBRX3{BM!^&Uo>IENKo@ho5-OI23lU_A{d?^sH^Cp*wTXDzfKtK&sOI`i8e;CQX){EcJ zi+`dQe{U~76TEs}Dtxs|tl$TC^V6b^{XGy+SDDa&-Qd+Z7~&hi_jGWx>eqdrRD`Cw zrKnp_X!v}{lsy|LG<8HG>b*UDcN>iw+PcTsq4z_!1~d(Hh?lof>d1s3Tr@-q_9l>m zRqFrZW(%kJ1z)M^2l}?E(-b9cA8=>-xmld_`mXzR&BU=pO3dw z+zRy+RoAtLK+4f2pkk1^{;RLLC#tV1C(4U4AO|QU&p})DtH-Ggq_9+5JtNesbTiyl z9w&p;_3m$ALUJU4KW^2m;;`~1G4{^Ak+E&sBfoB^t0r-TyE;G343sz zNr{SzZ^0d<(h@b;B|GEI3&-OiAT^9Srtmsqrmot|) gZ9Q!tlsEP=-=1sUZ@O6G%`=ZOP56Kvd1l9d0QIc`*8l(j diff --git a/graphs.cmi b/graphs.cmi index bfe425afa1098ad4617b46125b6e0279e30b5fbf..6828a5bfbc6f60533c091c2550bee53d8ef2e29c 100644 GIT binary patch literal 7975 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 delta 17421 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 diff --git a/graphs.ml b/graphs.ml index 00f1d6d..8d75aea 100644 --- a/graphs.ml +++ b/graphs.ml @@ -152,7 +152,7 @@ let generate_type2_graph w h freq inf sup = gr ;; -let another_type_of_graph_printing (gr : type2graph) r d is_weighted = +let another_type_of_graph_printing (gr : type2graph) r dx dy 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 @@ -183,37 +183,37 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted = set_color black ; for i = 0 to gr.width -1 do for j = 0 to gr.height -1 do - let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in + let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j-1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j-1))|] ; end; if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) then begin (* O *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*j)|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*j)|] ; end; if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) then begin (* NO *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j+1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j+1))|] ; end; if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) then begin (* N *) - draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j+1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j+1))|] ; 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; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j+1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j+1))|] ; end; if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) then begin (* E *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*j)|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*j)|] ; end; if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) then begin (* SE *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j-1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j-1))|] ; end; if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) then begin (* S *) - draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j-1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j-1))|] ; end; done @@ -228,7 +228,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted = set_line_width 8; for i = 0 to gr.width -1 do for j = 0 to gr.height -1 do - let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in + let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *) if is_weighted then begin set_color bcolor; @@ -240,7 +240,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted = 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ; end end; @@ -255,7 +255,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted = 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|] ; end end; @@ -270,7 +270,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted = 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ; end end; @@ -285,7 +285,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted = 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ; end end; @@ -300,7 +300,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted = 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ; end end; @@ -315,7 +315,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted = 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|] ; end end; @@ -330,7 +330,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted = 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ; end end; @@ -345,7 +345,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted = 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ; end end; @@ -356,11 +356,11 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted = for i = 0 to gr.width -1 do for j = 0 to gr.height -1 do set_color (rgb 48 48 48) ; - fill_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ; + fill_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ; set_color black ; - draw_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ; + draw_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ; set_color colors.(i).(j) ; - draw_integer (r + (2*r + d)*i) (r + (2*r + d)*j) gr.g.(i).(j).tag r + draw_integer (r + (2*r + dx)*i) (r + (2*r + dy)*j) gr.g.(i).(j).tag r done done ; @@ -370,7 +370,7 @@ let another_type_of_graph_printing (gr : type2graph) r d is_weighted = (* ------------------------------------------------------------*) (* ------------------------------------------------------------*) -let another_type_of_dfs (gr : type2graph) r d = +let another_type_of_dfs (gr : type2graph) r dx dy dt = 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 @@ -398,37 +398,37 @@ let another_type_of_dfs (gr : type2graph) r d = set_color (rgb 192 192 192) ; for i = 0 to gr.width -1 do for j = 0 to gr.height -1 do - let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in + let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j-1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j-1))|] ; end; if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) then begin (* O *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*j)|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*j)|] ; end; if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) then begin (* NO *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j+1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j+1))|] ; end; if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) then begin (* N *) - draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j+1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j+1))|] ; 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; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j+1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j+1))|] ; end; if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) then begin (* E *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*j)|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*j)|] ; end; if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) then begin (* SE *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j-1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j-1))|] ; end; if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) then begin (* S *) - draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j-1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j-1))|] ; end; done @@ -437,37 +437,37 @@ let another_type_of_dfs (gr : type2graph) r d = set_line_width 8; for i = 0 to gr.width -1 do for j = 0 to gr.height -1 do - let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in + let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ; 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|] ; 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ; 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ; 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ; 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|] ; 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ; 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ; end; done @@ -477,21 +477,21 @@ let another_type_of_dfs (gr : type2graph) r d = for i = 0 to gr.width -1 do for j = 0 to gr.height -1 do set_color (rgb 192 192 192) ; - fill_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ; + fill_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ; set_color (rgb 100 100 100) ; - draw_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ; - draw_integer (r + (2*r + d)*i) (r + (2*r + d)*j) gr.g.(i).(j).tag r + draw_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ; + draw_integer (r + (2*r + dx)*i) (r + (2*r + dy)*j) gr.g.(i).(j).tag r done done ; let draw_tile i j = set_line_width 5; set_color (rgb 48 48 48) ; - fill_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ; + fill_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ; set_color black; - draw_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ; + draw_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ; set_color colors.(i).(j); - draw_integer (r + (2*r + d)*i) (r + (2*r + d)*j) gr.g.(i).(j).tag r ; + draw_integer (r + (2*r + dx)*i) (r + (2*r + dy)*j) gr.g.(i).(j).tag r ; in (* Now for the actual DFS *) @@ -504,21 +504,21 @@ let another_type_of_dfs (gr : type2graph) r d = draw_tile i j; set_color white; - fill_circle (1200-r) (800-r) r; + fill_circle (r + (2*r + dx)*(gr.width/2)) (r + (2*r + dy)*(gr.height/2)) r; set_color black; - draw_integer (1200-r) (800-r) depth r; + draw_integer (r + (2*r + dx)*(gr.width/2)) (r + (2*r + dy)*(gr.height/2)) depth r; - Unix.sleepf 0.8; + Unix.sleepf dt; - let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in + let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) && (visited.(i-1).(j-1) = false) then begin (* SO *) set_line_width 4; set_color black; - draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j-1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j-1))|] ; set_color colors.(i).(j); set_line_width 8; - 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ; draw_tile i j; @@ -528,10 +528,10 @@ let another_type_of_dfs (gr : type2graph) r d = if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) && (visited.(i-1).(j) = false) then begin (* O *) set_line_width 4; set_color black; - draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*j)|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*j)|] ; set_color colors.(i).(j); set_line_width 8; - 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|] ; draw_tile i j; @@ -541,10 +541,10 @@ let another_type_of_dfs (gr : type2graph) r d = if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) && (visited.(i-1).(j+1) = false) then begin (* NO *) set_line_width 4; set_color black; - draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j+1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j+1))|] ; set_color colors.(i).(j); set_line_width 8; - 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ; draw_tile i j; @@ -554,10 +554,10 @@ let another_type_of_dfs (gr : type2graph) r d = if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) && (visited.(i).(j+1) = false) then begin (* N *) set_line_width 4; set_color black; - draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j+1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j+1))|] ; set_color colors.(i).(j); set_line_width 8; - 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ; draw_tile i j; @@ -567,10 +567,10 @@ let another_type_of_dfs (gr : type2graph) r d = if (i < gr.width-1 && j < gr.height -1) && gr.g.(i).(j).edges.(4) <> (-1) && (visited.(i+1).(j+1) = false) then begin (* NE *) set_line_width 4; set_color black; - draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j+1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j+1))|] ; set_color colors.(i).(j); set_line_width 8; - 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ; draw_tile i j; @@ -580,10 +580,10 @@ let another_type_of_dfs (gr : type2graph) r d = if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) && (visited.(i+1).(j) = false) then begin (* E *) set_line_width 4; set_color black; - draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*j)|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*j)|] ; set_color colors.(i).(j); set_line_width 8; - 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|] ; draw_tile i j; @@ -593,10 +593,10 @@ let another_type_of_dfs (gr : type2graph) r d = if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) && (visited.(i+1).(j-1) = false) then begin (* SE *) set_line_width 4; set_color black; - draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j-1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j-1))|] ; set_color colors.(i).(j); set_line_width 8; - 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ; draw_tile i j; @@ -606,10 +606,10 @@ let another_type_of_dfs (gr : type2graph) r d = if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) && (visited.(i).(j-1) = false) then begin (* S *) set_line_width 4; set_color black; - draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j-1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j-1))|] ; set_color colors.(i).(j); set_line_width 8; - 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ; draw_tile i j; @@ -627,7 +627,7 @@ let another_type_of_dfs (gr : type2graph) r d = (* ------------------------------------------------------------*) (* ------------------------------------------------------------*) -let another_type_of_bfs (gr : type2graph) r d = +let another_type_of_bfs (gr : type2graph) r dx dy gwd ght dt = 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 @@ -655,37 +655,37 @@ let another_type_of_bfs (gr : type2graph) r d = set_color (rgb 192 192 192) ; for i = 0 to gr.width -1 do for j = 0 to gr.height -1 do - let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in + let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j-1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j-1))|] ; end; if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) then begin (* O *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*j)|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*j)|] ; end; if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) then begin (* NO *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j+1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j+1))|] ; end; if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) then begin (* N *) - draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j+1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j+1))|] ; 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; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j+1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j+1))|] ; end; if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) then begin (* E *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*j)|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*j)|] ; end; if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) then begin (* SE *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j-1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j-1))|] ; end; if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) then begin (* S *) - draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j-1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j-1))|] ; end; done @@ -694,37 +694,37 @@ let another_type_of_bfs (gr : type2graph) r d = set_line_width 8; for i = 0 to gr.width -1 do for j = 0 to gr.height -1 do - let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in + let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ; 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|] ; 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ; 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ; 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|] ; 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|] ; 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ; 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|] ; + draw_poly_line [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|] ; end; done @@ -734,21 +734,21 @@ let another_type_of_bfs (gr : type2graph) r d = for i = 0 to gr.width -1 do for j = 0 to gr.height -1 do set_color (rgb 192 192 192) ; - fill_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ; + fill_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ; set_color (rgb 100 100 100) ; - draw_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ; - draw_integer (r + (2*r + d)*i) (r + (2*r + d)*j) gr.g.(i).(j).tag r + draw_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ; + draw_integer (r + (2*r + dx)*i) (r + (2*r + dy)*j) gr.g.(i).(j).tag r done done ; let draw_tile i j = set_line_width 5; set_color (rgb 48 48 48) ; - fill_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ; + fill_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ; set_color black; - draw_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ; + draw_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ; set_color colors.(i).(j); - draw_integer (r + (2*r + d)*i) (r + (2*r + d)*j) gr.g.(i).(j).tag r ; + draw_integer (r + (2*r + dx)*i) (r + (2*r + dy)*j) gr.g.(i).(j).tag r ; in (* Actual BFS *) @@ -779,44 +779,44 @@ let another_type_of_bfs (gr : type2graph) r d = visited.(i).(j) <- true; set_color white; - fill_circle (1200-r) (800-r) r; + fill_circle (r + (2*r + dx)*(gr.width/2)) (r + (2*r + dy)*(gr.height/2)) r; set_color black; - draw_integer (1200-r) (800-r) depth r; + draw_integer (r + (2*r + dx)*(gr.width/2)) (r + (2*r + dy)*(gr.height/2)) depth r; - Unix.sleepf 0.5; + Unix.sleepf dt; - let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in + let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) && (visited.(i-1).(j-1) = false) then begin (* SO *) - Queue.add (depth+1, i, j, i-1, j-1, [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|]) pq; + Queue.add (depth+1, i, j, i-1, j-1, [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|]) pq; end; if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) && (visited.(i-1).(j) = false) then begin (* O *) - Queue.add (depth+1, i, j, i-1, j, [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*j)|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|]) pq; + Queue.add (depth+1, i, j, i-1, j, [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*j)|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|]) pq; end; if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) && (visited.(i-1).(j+1) = false) then begin (* NO *) - Queue.add (depth+1, i, j, i-1, j+1, [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|]) pq; + Queue.add (depth+1, i, j, i-1, j+1, [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|]) pq; end; if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) && (visited.(i).(j+1) = false) then begin (* N *) - Queue.add (depth+1, i, j, i, j+1, [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|]) pq; + Queue.add (depth+1, i, j, i, j+1, [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|]) pq; end; if (i < gr.width-1 && j < gr.height -1) && gr.g.(i).(j).edges.(4) <> (-1) && (visited.(i+1).(j+1) = false) then begin (* NE *) - Queue.add (depth+1, i, j, i+1, j+1, [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|]) pq; + Queue.add (depth+1, i, j, i+1, j+1, [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j+1))/3|]) pq; end; if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) && (visited.(i+1).(j) = false) then begin (* E *) - Queue.add (depth+1, i, j, i+1, j, [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*j)|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|]) pq; + Queue.add (depth+1, i, j, i+1, j, [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*j)|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*j)/3|]) pq; end; if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) && (visited.(i+1).(j-1) = false) then begin (* SE *) - Queue.add (depth+1, i, j, i+1, j-1, [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|]) pq; + Queue.add (depth+1, i, j, i+1, j-1, [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|]) pq; end; if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) && (visited.(i).(j-1) = false) then begin (* S *) - Queue.add (depth+1, i, j, i, j-1, [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|]) pq; + Queue.add (depth+1, i, j, i, j-1, [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dx)*i)/3, (2 * (snd node_xy) + r + (2*r + dy)*(j-1))/3|]) pq; end end; done; @@ -985,7 +985,7 @@ let pq_init a default_priority = (* ------------------------------------------------------------*) (* ------------------------------------------------------------*) -let another_type_of_dijkstra (gr : type2graph) r d = +let another_type_of_dijkstra (gr : type2graph) r dx dy dt gwd ght = 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 @@ -1016,37 +1016,37 @@ let another_type_of_dijkstra (gr : type2graph) r d = set_color black ; for i = 0 to gr.width -1 do for j = 0 to gr.height -1 do - let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in + let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j-1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j-1))|] ; end; if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) then begin (* O *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*j)|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*j)|] ; end; if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) then begin (* NO *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j+1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i-1)), (r + (2*r + dy)*(j+1))|] ; end; if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) then begin (* N *) - draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j+1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j+1))|] ; 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; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j+1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j+1))|] ; end; if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) then begin (* E *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*j)|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*j)|] ; end; if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) then begin (* SE *) - draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j-1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*(i+1)), (r + (2*r + dy)*(j-1))|] ; end; if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) then begin (* S *) - draw_poly_line [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j-1))|] ; + draw_poly_line [|node_xy; (r + (2*r + dx)*i), (r + (2*r + dy)*(j-1))|] ; end; done @@ -1063,7 +1063,7 @@ let another_type_of_dijkstra (gr : type2graph) r d = set_line_width 8; for i = 0 to gr.width -1 do for j = 0 to gr.height -1 do - let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in + let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *) if is_weighted then begin set_color bcolor; @@ -1151,26 +1151,26 @@ let another_type_of_dijkstra (gr : type2graph) r d = for i = 0 to gr.width -1 do for j = 0 to gr.height -1 do set_color (rgb 48 48 48) ; - fill_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ; + fill_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ; set_color black ; - draw_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ; + draw_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ; set_color (rgb 48 48 48) ; - draw_integer (r + (2*r + d)*i) (r + (2*r + d)*j) gr.g.(i).(j).tag r + draw_integer (r + (2*r + dx)*i) (r + (2*r + dy)*j) gr.g.(i).(j).tag r done done ; let draw_tile i j = set_line_width 5; set_color (rgb 48 48 48) ; - fill_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ; + fill_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ; set_color black; - draw_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ; + draw_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ; set_color colors.(i).(j); - draw_integer (r + (2*r + d)*i) (r + (2*r + d)*j) gr.g.(i).(j).tag r ; + draw_integer (r + (2*r + dx)*i) (r + (2*r + dy)*j) gr.g.(i).(j).tag r ; let fcolor = rgb 255 0 0 in - let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in + let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) then begin (* SO *) if is_weighted then begin set_color bcolor; @@ -1294,58 +1294,58 @@ let another_type_of_dijkstra (gr : type2graph) r d = if mindists.(i).(j) > depth then begin mindists.(i).(j) <- depth; set_color (rgb 48 48 48) ; - fill_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ; + fill_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ; set_color black ; - draw_circle (r + (2*r + d)*i) (r + (2*r + d)*j) r ; + draw_circle (r + (2*r + dx)*i) (r + (2*r + dy)*j) r ; set_color colors.(i).(j); - draw_integer (r + (2*r + d)*i) (r + (2*r + d)*j) depth r + draw_integer (r + (2*r + dx)*i) (r + (2*r + dy)*j) depth r end; - let node_xy = ((r + (2*r + d)*i0), (r + (2*r + d)*j0)) in - let dx = i - i0 and dy = j - j0 in - if (dx, dy) = (1, 1) then begin + let node_xy = ((r + (2*r + dx)*i0), (r + (2*r + dy)*j0)) in + let dxx = i - i0 and dyy = j - j0 in + if (dxx, dyy) = (1, 1) then begin set_color dcolor; set_line_width 3; draw_integer (fst node_xy + roff) (snd node_xy + roff) gr.g.(i0).(j0).edges.(4) rsize; done_smth := true; end - else if (dx, dy) = (1, 0) then begin + else if (dxx, dyy) = (1, 0) then begin set_color dcolor; set_line_width 3; draw_integer (fst node_xy + roff2) (snd node_xy) gr.g.(i0).(j0).edges.(5) rsize; done_smth := true; end - else if (dx, dy) = (1, -1) then begin + else if (dxx, dyy) = (1, -1) then begin set_color dcolor; set_line_width 3; draw_integer (fst node_xy + roff) (snd node_xy - roff) gr.g.(i0).(j0).edges.(6) rsize; done_smth := true; end - else if (dx, dy) = (0, -1) then begin + else if (dxx, dyy) = (0, -1) then begin set_color dcolor; set_line_width 3; draw_integer (fst node_xy) (snd node_xy - roff2) gr.g.(i0).(j0).edges.(7) rsize; done_smth := true; end - else if (dx, dy) = (-1, -1) then begin + else if (dxx, dyy) = (-1, -1) then begin set_color dcolor; set_line_width 3; draw_integer (fst node_xy - roff) (snd node_xy - roff) gr.g.(i0).(j0).edges.(0) rsize; done_smth := true; end - else if (dx, dy) = (-1, 0) then begin + else if (dxx, dyy) = (-1, 0) then begin set_color dcolor; set_line_width 3; draw_integer (fst node_xy - roff2) (snd node_xy) gr.g.(i0).(j0).edges.(1) rsize; done_smth := true; end - else if (dx, dy) = (-1, 1) then begin + else if (dxx, dyy) = (-1, 1) then begin set_color dcolor; set_line_width 3; draw_integer (fst node_xy - roff) (snd node_xy + roff) gr.g.(i0).(j0).edges.(2) rsize; done_smth := true; end - else if (dx, dy) = (0, 1) then begin + else if (dxx, dyy) = (0, 1) then begin set_color dcolor; set_line_width 3; draw_integer (fst node_xy) (snd node_xy + roff2) gr.g.(i0).(j0).edges.(3) rsize; @@ -1353,53 +1353,53 @@ let another_type_of_dijkstra (gr : type2graph) r d = end; set_color white; - fill_circle (1200-r) (800-r) r; + fill_circle (r + (2*r + dx)*(gr.width/2)) (r + (2*r + dy)*(gr.height/2)) r; set_color black; - draw_integer (1200-r) (800-r) depth r; + draw_integer (r + (2*r + dx)*(gr.width/2)) (r + (2*r + dy)*(gr.height/2)) depth r; if !done_smth then - Unix.sleepf 0.5; + Unix.sleepf dt; - let node_xy = ((r + (2*r + d)*i), (r + (2*r + d)*j)) in + let node_xy = ((r + (2*r + dx)*i), (r + (2*r + dy)*j)) in if (i > 0 && j > 0) && gr.g.(i).(j).edges.(0) <> (-1) && ((i >= 0) && (j >= 0) && (i < gr.width) && (j < gr.height)) && loops.(i).(j).(0) = false then begin (* SO *) loops.(i).(j).(0) <- true; - pq_add (i, j, i-1, j-1, [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|]) pq (depth+gr.g.(i).(j).edges.(0)); + pq_add (i, j, i-1, j-1, [|node_xy; (r + (2*r + dxx)*(i-1)), (r + (2*r + dyy)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dxx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dyy)*(j-1))/3|]) pq (depth+gr.g.(i).(j).edges.(0)); end; if (i > 0) && gr.g.(i).(j).edges.(1) <> (-1) && ((i >= 0) && (j >= 0) && (i < gr.width) && (j < gr.height)) && loops.(i).(j).(1) = false then begin (* O *) loops.(i).(j).(1) <- true; - pq_add (i, j, i-1, j, [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*j)|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|]) pq (depth+gr.g.(i).(j).edges.(1)); + pq_add (i, j, i-1, j, [|node_xy; (r + (2*r + dxx)*(i-1)), (r + (2*r + dyy)*j)|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dxx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dyy)*j)/3|]) pq (depth+gr.g.(i).(j).edges.(1)); end; if (i > 0 && j < gr.height -1) && gr.g.(i).(j).edges.(2) <> (-1) && ((i >= 0) && (j >= 0) && (i < gr.width) && (j < gr.height)) && loops.(i).(j).(2) = false then begin (* NO *) loops.(i).(j).(2) <- true; - pq_add (i, j, i-1, j+1, [|node_xy; (r + (2*r + d)*(i-1)), (r + (2*r + d)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|]) pq (depth+gr.g.(i).(j).edges.(2)); + pq_add (i, j, i-1, j+1, [|node_xy; (r + (2*r + dxx)*(i-1)), (r + (2*r + dyy)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dxx)*(i-1))/3, (2 * (snd node_xy) + r + (2*r + dyy)*(j+1))/3|]) pq (depth+gr.g.(i).(j).edges.(2)); end; if (j < gr.height -1) && gr.g.(i).(j).edges.(3) <> (-1) && ((i >= 0) && (j >= 0) && (i < gr.width) && (j < gr.height)) && loops.(i).(j).(3) = false then begin (* N *) loops.(i).(j).(3) <- true; - pq_add (i, j, i, j+1, [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|]) pq (depth+gr.g.(i).(j).edges.(3)); + pq_add (i, j, i, j+1, [|node_xy; (r + (2*r + dxx)*i), (r + (2*r + dyy)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dxx)*i)/3, (2 * (snd node_xy) + r + (2*r + dyy)*(j+1))/3|]) pq (depth+gr.g.(i).(j).edges.(3)); end; if (i < gr.width-1 && j < gr.height -1) && gr.g.(i).(j).edges.(4) <> (-1) && ((i >= 0) && (j >= 0) && (i < gr.width) && (j < gr.height)) && loops.(i).(j).(4) = false then begin (* NE *) loops.(i).(j).(4) <- true; - pq_add (i, j, i+1, j+1, [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j+1))/3|]) pq (depth+gr.g.(i).(j).edges.(4)); + pq_add (i, j, i+1, j+1, [|node_xy; (r + (2*r + dxx)*(i+1)), (r + (2*r + dyy)*(j+1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dxx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dyy)*(j+1))/3|]) pq (depth+gr.g.(i).(j).edges.(4)); end; if (i < gr.width-1) && gr.g.(i).(j).edges.(5) <> (-1) && ((i >= 0) && (j >= 0) && (i < gr.width) && (j < gr.height)) && loops.(i).(j).(5) = false then begin (* E *) loops.(i).(j).(5) <- true; - pq_add (i, j, i+1, j, [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*j)|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*j)/3|]) pq (depth+gr.g.(i).(j).edges.(5)); + pq_add (i, j, i+1, j, [|node_xy; (r + (2*r + dxx)*(i+1)), (r + (2*r + dyy)*j)|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dxx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dyy)*j)/3|]) pq (depth+gr.g.(i).(j).edges.(5)); end; if (i < gr.width-1 && j > 0) && gr.g.(i).(j).edges.(6) <> (-1) && ((i >= 0) && (j >= 0) && (i < gr.width) && (j < gr.height)) && loops.(i).(j).(6) = false then begin (* SE *) loops.(i).(j).(6) <- true; - pq_add (i, j, i+1, j-1, [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|]) pq (depth+gr.g.(i).(j).edges.(6)); + pq_add (i, j, i+1, j-1, [|node_xy; (r + (2*r + dxx)*(i+1)), (r + (2*r + dyy)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dxx)*(i+1))/3, (2 * (snd node_xy) + r + (2*r + dyy)*(j-1))/3|]) pq (depth+gr.g.(i).(j).edges.(6)); end; if (j > 0) && gr.g.(i).(j).edges.(7) <> (-1) && ((i >= 0) && (j >= 0) && (i < gr.width) && (j < gr.height)) && loops.(i).(j).(7) = false then begin (* S *) loops.(i).(j).(7) <- true; - pq_add (i, j, i, j-1, [|node_xy; (r + (2*r + d)*i), (r + (2*r + d)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + d)*i)/3, (2 * (snd node_xy) + r + (2*r + d)*(j-1))/3|]) pq (depth+gr.g.(i).(j).edges.(7)); + pq_add (i, j, i, j-1, [|node_xy; (r + (2*r + dxx)*i), (r + (2*r + dyy)*(j-1))|], [|node_xy; (2 * (fst node_xy) + r + (2*r + dxx)*i)/3, (2 * (snd node_xy) + r + (2*r + dyy)*(j-1))/3|]) pq (depth+gr.g.(i).(j).edges.(7)); end end; done; @@ -1413,17 +1413,45 @@ let another_type_of_dijkstra (gr : type2graph) r d = (* ----------------------- Tests --------------------------- *) -open_graph " 1200x800" ;; -set_window_title "Graphs" ;; +let main r = + Stdlib.print_endline "Enter the width of the graph (use 8 for weighted): "; + let wd = Scanf.bscanf Scanf.Scanning.stdin "%d\n" identity in -let type2 = generate_type2_graph 7 5 40 1 10 ;; + if wd <= 0 then failwith "Error : invalid input"; -(*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_dijkstra type2 35 75 ;; + Stdlib.print_endline "Enter the height of the graph (use 6 for weighted): "; + let ht = Scanf.bscanf Scanf.Scanning.stdin "%d\n" identity in -close_graph () ;; + if ht <= 0 then failwith "Error : invalid input"; + + Stdlib.print_endline "Is the grap weighted ? (0/1)"; + let is_weighted = Scanf.bscanf Scanf.Scanning.stdin "%d\n" identity in + let weighted = ref false in + + if is_weighted = 1 then weighted := true; + + Stdlib.print_endline "Enter the mode :\n0 for display\n1 for BFS\n2 for DFS\n3 for Dijkstra\n"; + let choice = Scanf.bscanf Scanf.Scanning.stdin "%d\n" identity in + + open_graph " 1500x1000" ; + set_window_title "Graphs" ; + + let gwd = 1500-r and ght = 1000-r in + + let offset_x = (gwd - r)/(wd-1) - 2*r in + let offset_y = (ght - r)/(ht-1) - 2*r in + + let type2 = generate_type2_graph wd ht r 1 60 in + + let dt = 0.25 in + + if choice = 0 then begin another_type_of_graph_printing type2 r offset_x offset_y !weighted; close_graph () end + else if choice = 1 then begin another_type_of_dfs type2 r offset_x offset_y dt ; close_graph () end + else if choice = 2 then begin another_type_of_bfs type2 r offset_x offset_y gwd ght dt ; close_graph () end + else if choice = 3 then begin another_type_of_dijkstra type2 r offset_x offset_y dt gwd ght ; close_graph () end + else failwith "Error : invalid input";; + +main 35;; (* ----------------------- Tests --------------------------- *)