From 648b62ea4b9630be47ef2f5a5ce2248e46aa5093 Mon Sep 17 00:00:00 2001 From: Alexandre Date: Fri, 31 May 2024 23:31:53 +0200 Subject: [PATCH] Random and full graph generators --- a.out | Bin 279496 -> 280788 bytes graphs.cmi | Bin 1173 -> 1804 bytes graphs.cmo | Bin 6443 -> 8085 bytes graphs.ml | 65 ++++++++++++++++++++++++++++++++++++++++++++--------- 4 files changed, 55 insertions(+), 10 deletions(-) diff --git a/a.out b/a.out index 82db9a0b855cfade6d51c11e4a74d02789596d4a..5aa98bfdfc07d51df84443f8bc4fd789d988490f 100755 GIT binary patch delta 940 zcmb`FO=wd=5XX1lY-*dv^u<^!*w`0(h*~vGt+Xdi75qTKBG!TwwX{+ZL5kwRP^wU@ zheFi_2XoR}5QK`AN5MHdK6~qq`h%+${s(A3=!jGB#&)eDAH?uJ5 zOWpBZpO6#AEZk1H-YOx49=z(uL<)xWlBqB&WqYuRtmU;lh-4<)U<6%$Vl^W1+b{9o!mI=iawc|90!LTkHJcdyjyUazvv zG<1TCd#A833n4kAM@ua=hq+#XZ!*v!cjB`}2>G}%+}~?txe*(1ZV_TKrRS&p{8Jj| zC^$p`KVcA@)PrLg*d-JABm>9ftV56=6*W+X4-T8teq#Kn9f6MBTMxJTQ|#uz(^i0 z2YBn8V9TRAf(-kCm-%+)EkyrOj`Oz$Z3hb!L7X12bhNha2t|L4c zDZoLDE*O^Hl3j0472xJ^cWJMOVzf$jbGN$ZHcO$AdXannr6Kk4LHwI9j4$@7SH`Cq JytQ9Ne*##W+)e-h delta 333 zcmcaIQSd~&U_%RI3)2?n30GM6Ff%YPOinBlp1$G=bISAw#mp?z7aU?{+5YARvjOw; zgu_fM(;FTz%P=}kzj&9~fAWs^Jk!_QVV0Tx=MHnkWQz|1lP~nMOjdZTAbQ~c|NqHA z!-RpD35e5ySZsRXZD!%=8}2eIFwO=Wz*+?qj@cf0kNG|$W5?u!{lXy4jOo(@4>JjG z2ilaw&Sd{*`n%`MZmeE^{{J_d9{7S;UlwE-ClK2MF$jRzRxo<{!xzlOoNPdD77#m3 zFMP=yE(lT~55zn`4AN~ho$(d3G$Y4!*;mZ&f_6X=b|3};kb~K`PkqJQ8N~I&9;6-! ser(sUWtqk$aAaA&>aRDUfA)R&?=bu0Cy(jp+*yt=JzX+=iU*4W0M0~fWB>pF diff --git a/graphs.cmi b/graphs.cmi index a66da937b95c4977ca47ef201261c396a4d5bb3d..d42af4b6cb05a9244aa7d299c9456f14f8184ac4 100644 GIT binary patch literal 1804 zcmZvdZA=tL7{~Xavr+=+nI_t#jcE`LRMe#?foPjWl$J~M15{&a;ktOs^~&8I>@BpE zR%_HIjWu0NO%wStgs3%X#MTg_F?4N+eenfa-j$aMRBN@?7Acf!+nL=PhPHf|x&O>P z`(%lvlas!%YmaGQl<@(Q=hawA$O%jDtYpq3#4bazt141^{YBSZ`3xoldtsjk0-Q zk2CWOpXsG0ldH9Wk@na5D(wAWT}Q$X4(O^<7p#eWwL{s%8X? zT7W*=Gg=?rra=UZGDIn*ArOl}EVYo=QRS4Py+A41fl#F$u2Fs7N?kRKTJl3m5zzbq z{n1J^r6{_t)IN``Q)nLP{=A zl&5Z@EFN*2%R5~D%&gp{R!#^SB)$xZuUM!#DkIcPYXvp4cE*gZXufcW*|`?Avxj4U zaSHk0m+2na4maJC6xt>6_+PpFjmvRn?miO})MdM{6Xx%O`TH%@5tW#_9Im1+ll

2TgA^Vt1H1cgN1BSj6jV_-eFUE$_$_1u%IRGAWqvo zIMIM+EmfcyS!+yb>#Y~Z{$Ad^baj47^R&Ay`QH(lPn%M2Oe_?q^-Nt{ba8yR04<&s zkx#!4rnK=`-*h-PxAp{d??15jX2q#co4{V;m!sal+fr<6&Lk0(i2QbFNi3=43R$Vx7(BS}F z^3lYL62gyRDxSa?PbdD-7hMfj3N%a$Vc4^YgK}Kw5u|NpFfQZ;4L|y`2u~?-v zFSEoAA@~Yr{%aWH&Ez;{vB^6a)uq>fZDX;4y81l}BTUVQ$-fw_8P`rWW73%XmRYssRFqihu>cq%Y#^d`G8?Ok56g0fG)A5sj68b|u&jVG_c=H$ zWZ9nW-~fqLMs{GVY5?(6Ag)*di`EGSN0#NQ{(2MoXWxha4zoXg@|axB>N44f?EnCP CYtZQc diff --git a/graphs.cmo b/graphs.cmo index 57911caf796c9b8f8484de24a6c72c78e2864fef..b659973bf75da94b4854a0fca640956838235272 100644 GIT binary patch delta 2871 zcmb_dZERcR6~2#s@3nn>ZQsO=n~|hV+K{A8Nd1w}7`oP75p4&97Bc86ifin&4Y+Yg z+^QoWg9M^e(PZZxP(G&JN(cfJHGFhSr3wYD+R9qCG8I;743JihLOZDwZ0$y+?3_1t zS|Wbz$FB6~Ip6O&=f1vvHTvX=(5lq-Y$P6!-x`jE6(!W%t0>C*YAN)929mBT?F+&b zue<7+=8}3BVJl&Z9zSuREZBv*R7yrpxq3SHjP$}4l_mKK*SmCpZ9 z)BkV7(_0nJt8t3Q|IRzJx~9hD_>R{fTjkXFUZ?_EP@Hqk5l7Idt>wH>WZ@O>!~Te1r@!XbZ(Vx+XxBqk3djl zEvtsDUIMeh9)cnc28J70tK=~AmA;p-oS=$`b!VKd7J)Bq6M^+;nfWBXoC^pn^JO;) zyo77SGgck_1P@xPH&>I+am-wcxq>+)^J&~4Kl}q^InD|_k3RY0+f;oM-BvQY=@z-0 z-2DDpRu82Hw+*jDXpUG`_5FhAOw%VJxjl7XUvg((IuE62+d@^LoFtA(XKH9D_2cAl zUp|@2WQL%ew(Zhr=k57Sw*Q`F^0w4KCbu1Ua8~@*N<5BmMIUgS*#(Ef9E8Jd+XbOE z!0`kd8sU%u^>BQ|dI-*+F)x7gdFFaJPcXN^dCInn`x17sD3O4=jUCIN=DD*rIbwf$ z80v1e-vE^glvFpgWvs7))=M1W+4_=Ovbj_~ncI@=AIL*HOpfV|Wcqhb`=A}=EXwAM zs9tEF((y&HAleD-+)VuT9ob6!R~)B8yTm*fx+>OJ2d~%7nb>r0xE!n3%32Gfol)qG z9Nz&w%-jyWhj||Kg!n~usGzTzIaXiCo)yqHGcSiO=eM8_l0M!3aQ{H%h=;E@LN4Ss z=zBSFJ#?G-2IynVEzrj=pE1Fv4D_SSX&(4K7t|4u%RY8n2{2 z23IqiC*h(VOX?oDNs*Y4ntnE2^g~9F&JmAtahG* z{td5e{tUcs*3ZIQut?Cb0$$!fck2za>kD{$m_LL!AssitOB*g}m=7;)ii8C)DTjos zVRmusOE9NnH^ST?lQzN3%8&?59#TUZW|3om33D%d=Hfb-W73s{c}fa7nCC@rO-Ij* z3We{2`NE`zm&)=hD-#L$=$z8%HI+}v?djCO7WioKB~^oOgP5pU81wTS9dg^bd+tqU zb_~Mb^NqBX{C$GIm;1mT_>TyGsI|^7_t*wM?Xje`!hccv#}OD5>&PE?nEU?$0=wCN zGXnHtDE|XkbHr$9VV%W`RCBO8*gpV^+tP3W*0?wkYOk{<+5a@GqwIeQ)@k-T=A){Y z&aW@5p^wDc1gbI|b_i9xKy?CDe4OT3iE4!nZ=+h)b*x791Vt{EgZACOBb7yvCZ`Wg zEY=z6igd@L*LKIcd*Vyuv91_`H_I}+5geDo9t00_^c#yBBhhepS5F}v9-q`4W6FK- zHNzJs`Q@@4r_BesYt4~H@Pte&|1WULTS^wb+nk z#G=LUpByfj8{0m-cr0}6%TLy-bH)1Fbnrqke5rM-SNZGVuL39kWHwuVl7RBa^rEXj8!`1vnuXDe3# delta 1732 zcmY*ZUu=_A6#ss=-~IY^ZMVU?vak*}hhxYXUB}FZz&c&rB&aADXELp&-PlN3M^_9Y zu{YhvY+!?26pI51}7v#42g@tF- zk7XOG_E4gWq@9Eh>zf{;>hq1bEVA~JgwG+vU->ICI85%Q7;QJwpGZd2kz{{l za3~GjA%COx#|PhCi~)1pgKFm)-4J%3u2oNl8X;sha$*H3eg3=TakJpaE-^}b$%nBj_7A#N~sLj1s32XXV!CAZlXhnQoG zK|Ek=fy3ZcABMxHW@*(9o_>+;o>XL{FCB>`6Uh`DG=I+g5RUC!mVrZaE{5YS+g>>C zGx}iKj4NPvGOmQF^Q&O?uw4yvfcs3sr23rs8B9%MEo3Xl>obsHRyIKHVhlkZWo&^w z%h(Eef$>?$D~w-5>XADjZ?fG9sflz!>gV4E%ftR}VevBu^|umDM~6a%ZCd)(Ct(Hk zrZTlnjV-V=neSnBbL}-)I~c!%)x+2iE5Y~^tb>fxu#PZ(0ZVf|3G3M66X{;3IraxE z&HHCqm)V|$b&YWpmVTRYAHrbwpU7-_J!`9QChrO8tpTq9df%UNUcE5o=%7M$Ui6#F&RZV4G>wxh#-2cL} zc1B{bpl|31hhft_xv}*-)A7XM?nq>3EIQN=n--okC0wS;RMs}Tc#a0W=j86ak@$gO zxb8ew){#m@-$Rk1seFKrq7O%$aLYbXKQ+3U@%Q2&}1e zH!$g!;NHmb?Qqlc&^~U!J)_Q>tXx$ABZMUd`oSq zTA3++z#qWW+UllIFnF*v7`!+mMcjzNa|E7`N$)G@U+#KffAB9;nz5oCK diff --git a/graphs.ml b/graphs.ml index b2e07f2..4757f99 100644 --- a/graphs.ml +++ b/graphs.ml @@ -63,22 +63,27 @@ let improved_pretty_printing g wd ht r = coords.(k) <- (!i, !j) done ; + set_line_width 4 ; + set_color black ; 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))|]; + if g.(k).(l) <> (-1) then begin + draw_poly_line [|coords.(k); coords.(g.(k).(l))|] + end done done; - set_line_width 22 ; + set_line_width 12 ; 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)|] + if g.(k).(l) <> (-1) then begin + 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.75 *. cos slope) in + let nexj = int_of_float (float_of_int (snd coords.(k)) +. (float_of_int r) *. 1.75 *. sin slope) in + draw_poly_line [|coords.(k); (nexi, nexj)|] + end done done; @@ -96,11 +101,51 @@ let improved_pretty_printing g wd ht r = (* ----------------------- Tests --------------------------- *) +Random.self_init ;; +Random.self_init ;; + 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|]|] ;; +let generate_full_graph k = + let res = Array.make k [||] in + for i = 0 to k-1 do + res.(i) <- Array.make (k-1) 0 + done; -improved_pretty_printing gr 1200 800 50 ;; + for x = 0 to k-1 do + for y = 0 to k-1 do + if x < y then + res.(x).(y-1) <- y + else if x > y then + res.(x).(y) <- y + done + done; + res ;; + + let generate_random_graph k freq = + let res = Array.make k [||] in + for i = 0 to k-1 do + res.(i) <- Array.make (k-1) (-1) + done; + + for x = 0 to k-1 do + for y = 0 to k-1 do + if (Random.int 100) < freq then + if x < y then + res.(x).(y-1) <- y + else if x > y then + res.(x).(y) <- y + done + done; + res ;; + +let gr = [|[|3; 5; 7|]; [|0|]; [|1; 7; 8|]; [|2; 6; 9; 10|]; [|0; 1; 3|]; [|6; 7|]; [|0; 1; 2|]; [|8|]; [|0; 7; 6|]; [|10; 11|]; [|3; 5; 7|]; [|0; 9|]|] ;; +let fulg = generate_full_graph 16 ;; +let rang = generate_random_graph 9 50 ;; + +(*improved_pretty_printing gr 1200 800 50*) ;; +(*improved_pretty_printing fulg 1200 800 25 ;;*) +improved_pretty_printing rang 1200 800 45 ;; close_graph () ;; \ No newline at end of file