From ded82171ce0f6bfcd3abc99688aa58538694e442 Mon Sep 17 00:00:00 2001 From: Alexandre Date: Sat, 1 Jun 2024 21:21:05 +0200 Subject: [PATCH] pretty DFS --- a.out | Bin 288681 -> 301706 bytes graphs.cmi | Bin 3026 -> 3287 bytes graphs.cmo | Bin 17174 -> 32425 bytes graphs.ml | 259 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 258 insertions(+), 1 deletion(-) diff --git a/a.out b/a.out index b8907ca4388dbc3479668590215128261543fa6a..99d1635cf4df1328df530c96dcd7d8e7f4f90a8f 100755 GIT binary patch delta 3272 zcmb_edu&r>6z{p`yInh5Xep(bZf;``2pj2?$1qIkf|w~YNHMF8n&*5$j z9sCx2w5%09kVCsV&<7DZ-+_7Fd|sWya3>HXXveVy19`||ZErAQ{E0rveq1MS8~WT< z)$8d@3x@pGQ|X%Inwqen8--n0Hm+O|UHAt5vCccum&DnnLkahImJA74M`Q>rNSp zD65DJMta3Gl3RACQ@B0G@y<(VmoB^?_MxVb=Ao6dz@eL#po70~&DT9_PWXby3~HqhG92wpw-OAG(m#9 za7tR)!rdJ|cVGr6$f91!5%;^5vfr8wz1+nq+GiGIpz0QldI?L9{5ZwH2yyEW#uP>} zX(WP^!JZ}Sroa7CStJ7`pX3G$@9REytedE*=*A9ZR<)ay1}pnSRq8C|c)4&D9G245 zAKu_j^ZLyQn{nwHe=F8`394L&Z=~vu9y{yHOfq9?_m^wm$=oMp$=<hYiIxlSz6<(1;1P5Tlr z1$VNL)TGawWnEGIMJ)P{N1zLX&O2C|NVZb}58dXaaseYp9v=Z+Dv~>c9+vskBcLYw z%r|+_$Hpi+cO0vwvY0A{R4zL;oWK{I%dNvg8rqB%PI)?|wiMFJW~_8p zrsmq4`B*45WGRJIcM>bzUY?VO(?Z4(@}9&}TKF>#hZ)rH7mkHV)Y^h0{UZ24Vppmq zxQIc@xrz=WzZD}+*hTlXVv&6Vhh~+{Xgh^ZW$O#B#bR@!-i{DVrxHFLwa%Od`nrB8EiD{_a>T z5^bp9>_5TJu56wXM-8AgKR~d&n7fi%QbKCFVljCWNbPulQOgk1dKltR8Ou>g(Ewut zV>4a(8%v`lB}%+!u=f@QVT84#hY~4r?hGB=Xtp^{~;4_2oSqiZ8{aV#X)tVYd6`<?$~@@^mcbOdR6IcKDPrI!nC;;GrE3wTepi zq9gj+B#%=h-^@yZS)psMke3|0J8N8ScI^1E)zF^F}TTL77cYUxyzB7|I z9twxU+aC@Wj;PM251&?Tu-|ySN-YJ?-lO5Qqh>6ser|5vf<>V1GxTTGdk)Xf@paIIVx zwUr4WGQ+QRxpV1?BJ;HqnZ8Gm8>N`6r!2oHML=4O*dW@JXHA$Rde1QfCT;P8fe>wT z-av$Q_^&hVN`C+sF87`$M1@Lz$ipGjb4>^xv@Zuk=+)?h6B?0M&1y#<*>56CpBysz z#zc}n^R$I5ADgha`!U9N%2MrZ1eN^9!gDzv#tG3E?r(vvkg)pG5J!(OV@19tcr6q8xg$DETdY3G^78TEb5{lJRA{Ay4kKW3_2uCJ}#?9G@XA qFMq9Isn|1d+Vw9}^R(|>Aa?$8s5!{#H5_a1F@CnLJ{UZ)4&Q$pu6oe` diff --git a/graphs.cmi b/graphs.cmi index f857d9e8b307a444443c950ef858b1678deb990c..d1c3772848357e0165f9b6ec21447fb881c19624 100644 GIT binary patch delta 1568 zcmZWpe{54#6u#%~zIGdiNl>PfNZ7hD?95)bnph_04F+SdA01A%H>eyY2Nh@JC<2bME(j z=iYPfdt>Prp0v&PH2G}~hoej_RJU~Y978Cz6CpeUp=1a9J*wxF20ekb8}xoXGvEWf zFk+hqZ$%c(g3?GJJ>%`@K$w`cu!fbtuObcU0(3>XEJcgXL`Ssf|BHKALSnsFzVYYoqd^6qIUVn=xR3a;V@IVhf6v6>okFD+HT-c!- ztc_B2m?zp~;*gMiWSqs|lb7V`pb@W>@e#ouGWz+@o<0`KM^gkErjwJ3pn@(=%B}oF z8Xc4HIB#N@9F(bOtgi_Z9*Jd!B7ArmP)TQ!O!$hHkOhx? zA#J{-ox}xI^mk%`Z|PKJE}W*-N=f?Hl5$GIZ)l(5&2`3xq5zRA@i~!QGIf?+niXTl z#udnm5BOXx%#VlXjq%h;$#-JU-wSX-fFA_-QGkoI&$Ljhj#VaU(&Z=KECmtZZplM_2#VFLQiu`Xl+B#9cm3UxLdsLHQo(?m&WZAUWRe*6;>c5&924$ z6H-4j{}HO1t*`6=P{6VWEIq6fJ4G<0XYt_gHK8?r-zv9zeoIrp-@s^>>g{JwU3qzBktxml$MHG+x~>Y&JYS%H V0rQ}`y6TCnx@YrFduYKV{Xcc)K=A+o delta 1288 zcmZWpTS!zv7@q&^Iqt5RTAG%LmF~?}(p3YORE}oXhiEa;vJ0!E8ETv9Ls0}3L=?2! zBou+Ih-P56X5PBk+Qmw{Y+6}%BMqXPfzm?{S#!?rG*S;U{NF#{_h058W@yepxM``i ztkh&Sn^z?yB^;`5=tf9Aju59nNZCu)S*LDAh1Irgm(%5pwv_;U+zH0HN;w&y>MOXN2YTLt zCm}Xj&LzN0sAP}D2lZL97EZ7vnoOtOuM!)^=GO6QTa_Z$omMcQN_#E>V68o$?9QbmDHM|s?uWMLhx_(V&hwY zL@*o#!(qaIN5N5;XZa+aow@dmF=wD4-xP;``A=YTK+PYZY|DiJ diff --git a/graphs.cmo b/graphs.cmo index faa35b9230b1eca7dd81bfb704da00d90500eb54..fc37db35e0c4e52023b519b67419d985b2956b34 100644 GIT binary patch literal 32425 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 UzR)Dn4Y6>jiFi8S?xNBE0%ePcp8x;= delta 2901 zcmZuzeN3Ep9ly`RmX^0aW3gB|Y;RONrWUI9T=7{iZJ6&3 z%$mt)FLKNeq7x-|HtycdAtx_A{F~ZX7$1BFIfcX>^eD40WKqGC z3M1vSW+~kbRo;!2vpe$kFl0#9%x!Fd7>jNA`2!&i{Y3Dh)lrGc*@H_7%PPDQBR?57pgNwKw| zdb6*+sGgTZcG%-WcEirqHPm4jcc^}cT{EI^W7jPqUew6^e?m=}D1xXtBYB@d%~>H& zqK5LC>iu%m(7e=61T}99=||1F*>uudgO^~r3;kv2KVQ=D^0u(r84hFjs`-zx(!_3B zKuT%Yy)Jd4aM*;Ha2$|i=ipcr%?N6#7pjv+Z6KXao(rdwNqNGkeO@e!sHHQY$(}_m z1(ENMP`e_UucK~AG(SWgPqO({9Wm!7ZHc<;r0~mU79IXVkjr)(A|uc(5c6*qk!PzY)a;8p6lMg2!PC~O5!MP^h%W!f5&DsVRFI2Pcg{xOc2V7Ahop2?E zbip+zWFK7fLLP>TMxoSRxR!aBO!Z?J`$cgAMvssQ%VQ{wtf?&dOVGbN_S&x?33EgZq9$&AOO?TMmY<8h0<7{swoH@h!Mx;<5xc zZJgG64sKc*k$HG1hRCb%JS9Gd;n{S)49~P^uEH}XJ`3>Bm{e*Fo;QUYgJ)SxZ^Cn} zL{#shK?zw$gPm`WL`Jpc81lWy|Ll^MVc+7Ps+P^0_xiN%WwB^3ow6 zM#FU>{o)-pd=)@F=`hw5oe|Nf*86pQPu(bkh9&Nt@waCpVu2kMmzis7SW6WIaZlxaI<*nQ8DFMTaO*;U4U@SPWj4m3K=N64X37XK+U(&8!b zFdBP=44`qvoIR!68`n6)2pZoJ{nKc?E#z7FqvmfjOVyMi)FZRxAoSG#mOTg*&?N&`h=M-7Ewpjam;{w0G$o`8EiLKv?5w8x(6SOX zUq8KJzW;PbnMx)D$F4m1ky-UX_cy(dU+q5}^qC*~^1*7=lh#y{p2yR(%0W1t)~t8J G{QEbuEYu?a diff --git a/graphs.ml b/graphs.ml index b593a18..d343e9d 100644 --- a/graphs.ml +++ b/graphs.ml @@ -252,6 +252,262 @@ let another_type_of_graph_printing (gr : type2graph) r d = done done ; + ignore (Scanf.bscanf Scanf.Scanning.stdin "%d\n" identity) ;; + +(* ------------------------------------------------------------*) +(* ------------------------------------------------------------*) +(* ------------------------------------------------------------*) + +let another_type_of_dfs (gr : type2graph) r d = + 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 + if (i*gr.width + j) mod 6 = 0 then + colors.(i).(j) <- rgb 0 0 200 + + else if (i*gr.width + j) mod 6 = 1 then + colors.(i).(j) <- rgb 0 200 0 + + else if (i*gr.width + j) mod 6 = 2 then + colors.(i).(j) <- rgb 0 200 200 + + else if (i*gr.width + j) mod 6 = 3 then + colors.(i).(j) <- rgb 200 0 0 + + else if (i*gr.width + j) mod 6 = 4 then + colors.(i).(j) <- rgb 200 0 200 + + else + colors.(i).(j) <- rgb 200 200 0 + done + done; + + set_line_width 4; + 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 + 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))|] ; + 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)|] ; + 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))|] ; + 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))|] ; + 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))|] ; + 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)|] ; + 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))|] ; + 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))|] ; + end; + + done + done; + + 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 + 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|] ; + 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|] ; + 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|] ; + 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|] ; + 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|] ; + 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|] ; + 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|] ; + 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|] ; + end; + + done + done; + + set_line_width 5; + 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 ; + 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 + 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 ; + set_color black; + draw_circle (r + (2*r + d)*i) (r + (2*r + d)*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 ; + in + + (* Now for the actual DFS *) + let visited = Array.make_matrix gr.width gr.height false in + + let rec explore i j = + if visited.(i).(j) = false then begin + visited.(i).(j) <- true; + + draw_tile i j; + + Unix.sleepf 0.8; + + 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) && (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))|] ; + 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_tile i j; + + explore (i-1) (j-1) ; + end; + + 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)|] ; + 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_tile i j; + + explore (i-1) j ; + end; + + 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))|] ; + 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_tile i j; + + explore (i-1) (j+1) ; + end; + + 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))|] ; + 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_tile i j; + + explore i (j+1) ; + 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 *) + set_line_width 4; + set_color black; + draw_poly_line [|node_xy; (r + (2*r + d)*(i+1)), (r + (2*r + d)*(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_tile i j; + + explore (i+1) (j+1) ; + end; + + 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)|] ; + 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_tile i j; + + explore (i+1) j ; + end; + + 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))|] ; + 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_tile i j; + + explore (i+1) (j-1) ; + end; + + 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))|] ; + 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_tile i j; + + explore i (j-1) ; + end; + + end + in + + explore (gr.width/2) (gr.height/2); + +(* ------------------------------------------------------------*) +(* ------------------------------------------------------------*) +(* ------------------------------------------------------------*) + ignore (Scanf.bscanf Scanf.Scanning.stdin "%d\n" identity) ;; (* ----------------------- Tests --------------------------- *) @@ -260,7 +516,8 @@ set_window_title "Graphs" ;; let type2 = generate_type2_graph 8 6 40 1 1 ;; -another_type_of_graph_printing type2 35 75 ;; +(*another_type_of_graph_printing type2 35 75 ;;*) +another_type_of_dfs type2 35 75 ;; close_graph () ;;