From b0fb83e0303cbc4ce3f551ea052cc901f563bd6b Mon Sep 17 00:00:00 2001 From: ParkSuMin Date: Sun, 4 May 2025 22:25:57 +0300 Subject: [PATCH] Make vector diagram + comments for DFS method --- doc/maze.png | Bin 35913 -> 0 bytes doc/maze.svg | 25 +++++++++++++++++++++++++ doc/multithread_maze_server.md | 2 +- src/server/maze.cpp | 3 ++- 4 files changed, 28 insertions(+), 2 deletions(-) delete mode 100644 doc/maze.png create mode 100644 doc/maze.svg diff --git a/doc/maze.png b/doc/maze.png deleted file mode 100644 index a36ad1a001e050e7e1bb4b519b91677940eab7e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35913 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

_-Jr#uLQ z#s|+-Zr*(z1pUEBHEyL55fN3-{QaB2jLEQv;9*WgA14GYs%jXe&e|Og5 z#8fCUd3kxGRnFywg?FAzon=iI_|u-5BUG$pBiRzaOiWCG9ZgTK1z&=duj3B^?}7=vrgqh@M{!Jd(36T9h}scCMUT)_Z-!8p*z&p*0P~2c=84mN^>zw z^$e&v8Q4_-!7pA6d;OX~UHVg?sfw~P3O&&jWFdiJd=y}9laV?7{Co;{2H4vwzo1}b z$hF#ZD?qVY-k9sn@v^tSsUOQ%XxdK27aJcx4qYqYBBL^HM!aem;|<9|yWtV73VXvo z6=(tP45Y60Kv97D2irdU15fljMV;6P;Omj5PoF$7GB&nA0^s_uclnP7aQ*sq=xuYOF_7FpT(JmjuX9HE-x)QP>U1iWY1s!M4Q&2Ecax{I2j^6UdXmyVc!IN9>$0elV zabD8l^PFfrXJut&`Spj7dSVJwt&;-g4%b#ze)@wI^v(bvQYD9OB`F0(@%NPO@aGfr zIUk$N0L+jsH;2&HS@bf{pn0e?7Se~+5kAcS3TC36t%E6JQdjDAf1NeR~h-t@?rHIw9v9W#s@#6p>pLN;8`n-e$1K{<* z^-QL{yu2D-5W4TIBpOuIU^LJYcJ=tvcy0Wo`fO}$nrSI{M3=ap=Z+lDHCzN#3lz%O zLNeKoYDAgfp>=3Y%^~>PD7MarmU0g=ay!az|J7izh>^Z-la`07BY23L(;^rKV~|qM z!Oi^?yvzfBvD>8vQWpU+K$i%n;w>sGOMC9PIj>f4FIbl;R+A2?CCCc9f>h#wzh+=& zVj>X%a-71cTMP^@FyJ5N`2UF`<1m!{&5^&S3}9;4J9fNI0Cj(rEQ3GY&eXAf3HTi8 zJBW^vE}vl~nI?!!{RaE{%<0qj+m2s~pCi6E{WdHt?CsmDN7wktjn>xJnRQIf%!1}E zndQc(Mp(-6tYz|)FXP^1p~3*iQve)yN9%z}LXkyxCrd%s#4uMdiy!!}ox{i1E-?>H zu|GQ41vvNa%gnX9G&L&DG&_W1%{OT135?JhjnEf#VPCm}j|hYv@1Yatci5f{4GpQO zu-OrvJvIfCQL~T+>MFI;5cHdWKaY7?=0SY@5=<{t&+w^e(6p~Za{2t+uM3C`(8ocJ zD%3785CeV-H};*#48R9ulvu{OPomOl@jw!HmVSaScj^pIfy>P7>?>`*%Ko z3=LH#U0nfeqqpQ1c!Y$yLjk)t*AdK zxXfd&nBfI@J8sJXC?6~I|Ia}AA<>{{Q?uH9*@Org?zOZqxIONzuulmfXVeve5dP9| z5#d(kvHJu{Ed-n(kIbt!SD$z9B@v9IAQJtSBO|Mo1P#eCXQ7D5NJ)ALoC&5tHRMn=>BJbR}Qxce( zY65cw+NKyi$Vnb^sZppND1R}O_a!8Ri-+-V8Gd;Vnke{H3E#pg+G}kpAVtT$a%Ij$nyQfY%o&28{;rAjZ+etLEO^viU1NV*Gubta7zxd z5dqtZ%FmkP)5bm4<$}qYrjK{NikiDYkK&2_@S%mTUH8)ye;YXPkTBnXnd-F(UtO@a z@o624^b3vr%gg!Y1n=B|*s!)SiCrRKDlsuJ*xSb4hQ~*TJ?v`Fp+Tuk(t4~sbL`~J z#I6GHZDq9p?4kSmMWq5jqmMp{NlM~$T9U3EZRUGFg8#I%Xu!SHvbVPf+CZyW;xdG7ghtmuJ^hj(7jzlVYnE{uAh{&*TATT^>|Nae( zG>416E>75e03e&uMRpSk?0%NsGN#kY-Va-8&^K7u2xKzOR8zN(tM;VHU5++gCW7!g zude~_$&Il;Dr#)B{}mj8iH^J~aF~?D+!jEP;#3H+F}$FCU|LL;`Xf_b@f`B`*6gVB zcoal$8rs;9i?=*mPjpv7Pp4o6T&sZkRN1JE14vvG#|VQ=+kAcOv`sWG z3et+vv9}$P%;`E8T$N)JE}%1>pB@09^jsNB@M42TAtWx1^qXGz`#-4F#hfs3H32jQ zPz{XI_mpc({`eF;EExC;ur@jaORzN@7Q8X5vQhH$^s?*A9)PIXle~J;jE#+jg@rRc zKqxtl863z%oeU1pNTnSE2Scd*P@I!2_QE>$sDfPZN#8L*M9yW!;NH|tjNarZJH7c4 zhKLvml7VqCBu82;^J})KM%po3`i?(4;G(i(NEjL($8d(|FucJ32&PIkB<_&YfP4@3 z7V^VO9;*7rHpbZ1W|k#YtOKabg~$!;F<7bhy6u}^UjnNA=jJd9=~NT8V07B!hK>z3 z{*8q}PH59=y_$_$2|LrXv(gtqu80Po&F=V)uy@wQIGifLj>)%um}DFfx8F0^V#8rk@&ci zj>@9w>KiL^wf_|2tc%O(yZWumU*{M@$dT^J2UgVU@+=~2NR{R?7;7-CwHl;EN{P+g^@r1UH7pYb-aVszq1^V~K; z0-t63kWxQ_A#p0gN-neg8}CIO5zx{!@(iN0@V2*KYq+egR?A@mt0i=3#n8IzJJpMWfoc&83oAJJ+?j9o&aH9!hy97yvsT| zvdnHguJeK=rtetmYGJarpq5~Qa06OJkI%8va+^K`&H>)2c_?(P5U%RX;Zm#K4Zs(! zyBLDZvrpUw^f+yRR^1!6O-?P<7z2GeSWhpWKkssc0|>CZ%t?6rL5M}6H1$3~hlT{N zH4@@UeJ=qN#kX6c-&9=gyGnbh$ZgXSf`kJ$U_QcRD_!ePw{+Apa+>{NYHBKJ##u{# zj)33_pY{8S`wl;N#we)h1DAo?Z`6X?aplgF=jF*eUYY$As$0H^tA@msmaqMqyO@!B zxi3>KWQ1;8+Lf$$jFJ-^Un6X?9k79r)z-qe<(Ui=e_~Iil+E7Gjw588#xgG)bK#}B zKb_HUcMMLst0#FGU_iiG)F2o#r_&4%5BCIw`BH1&__jy)tup0R>4(V30nmw| zSKz&{V);v9AcHO4S7GCD<_$$LwCvJa-2cR=Z;Y_*n zgES8b&iy&6l>gA8Le;7^!eD zUThU-9@Cj8JFGc-_N>9+ScVWQtE{_jX?vl8ls`bz zHsHW9Id<$)jEOF_mSGCobVqoJ6f-mPyC>k2A;p52RSMu7!tbEjom$Wx>h0e{+$Y{* z7Tgk^$KT$9I<~%7l9-Xfv^R76u=n7^2I%m1e3~t;a;qPflS4#|D5hqAD74)5BEG%p3i|BHn7Zpj98GdxV%cd!r6dA^2E}SqCxhzA znc)S}1*)X^wmCtp(F~dUw=~}9cLZ;mFCTs!Wq<-ceZ0cPLd&lEwNvWOI zYsc{C=Vu4{%v2Gw9#0{BDdTx@JoR&CZg$z7J#8W5W`eyDIl{G=E2vtPeM`(x$|oBd z8`E(x)BopC9-WhSzp!CIpi`st zDnSqcA5K?C2bD^7%h`DwmhLNA(ywxho{7apnVHPXWKThdE(<(3?8)HFSjLV`X&U_A z*DPi{ODdR;y2qE>9sby!XKZ!`&8OYSfxuVri)}`=m!mqj7ctK}*n|mJTr@VW&7f0ae0ArT67RK$# zcmw^h!k0Rcu6C+99AlXfWgg&@ijk-Eb<|sv9ODH3m5CtLnHBoFOrDN6@${zXIM$zx zWfV+b^wA-Ze7Ryck5&DASjj`=&3xCVmkgN1Sl-*h?9;%ijL1NM+hMc1DIya0E;2dU z81N7=a=0p)kE`)7ZAr`HHywQXJQ!i}RmV*f`YYl~rGt7v+n-_TXI~lgOTuB!qk>oO zC-zg7^cBa0plYvWyIBe|f9+!4Qe?_xZux0m-Q784qizGN&^j7hF!)sXwp`c26%p_4 z_mH!Jo@iofYN^4o+HO+C;2kKT_(;R}X)J+$Q<1m!T8zw4ZEw!-3!bC2UJ}0^ns|0$ zjA5-RxRwF-bh?A{&DbyqcmnIPLMG0_5wDGWJ-k~J0w#D!(l03HV7$5U2}iHJ#q#lo zabqpc)2(EnfbQO@_(zVKo(4mi?d3U>bI2U(qn$X)aggfNq2Vyq^>FlFGXGC==DHn5 zDF(G7gF68b@oWh}F~5mv9ymNWU}_V= zghM=dG2sy8cErh8*>E!PcYS@KZ>75M;LZ#A+?T_04{)RwgS|RzXE0G7b4X#=b-u{PWDV(vx<3aPoxlj(x*oRf^1l!&nf|nvyzyLri87 ztAQL&I`%_s`Y6E8#H7@uja*$GS4UP>mY<)W<#?rmxM{{9OEMh}D=zfj5&+a4#c$d7 zDxMS4yp4;mXjw=He^JPOX=up&4gG!c#62?ChAr&KR|)CUe72$IJK37hK(1VBwMoO- zjLUjd%us3%vYUFCyu}9j>nnHO<+Dm2rff?bWM2xLOe=E|XKVu2sze8vDNSuwwbe^Q z9D|JV3n>5~g8?xUGcfz$(MuRYUsIK}dL@tK_~H>bselG$>G+-2d2GR^Q>3bU465?m zP&2o{ge!+kW`BP~^z`vt#T=bIetvrTRE2nv5-SYH@oNT=jCVk786?|xq^y>CJ#ut*b`$t<=dsi9YXY1hXpdu2)K$0v}1o;)d<+Ws{a z(YE&+uujh}U*Y-eLXMb7J9!RXUbWTb1ebeMwY$GBL*U7w1rm@T00kUN;eJMaOO6i3 zsS3Pa*M;r-D=14Mi2MN_oJ{HTQrLuG1{fU^8eF6hlotK2{j7Dv%L3g5< z`e#Sh-APRlDkVW9{`xEXsndw$rlk_&&^!!b87_t1GXmL=A?{*~bN3fXn#GlM0!sm6 zhCH_*6}2^9>hRaQf8UvS_&iv)Jpf5o|MK$wrckd5_o)SU=>-s7xBk$tj4jNUGEg%9 z`3dBtNa4^E;P+4N7V|U40i^Q&ATG2@IQ>wR4UWP!A38)8un}3yX+U}?h;|EC6m2PQ%gLP~ z4itb7jE;_;xesb0*Z_>V>H45L6&4qdK#&`J!8jq;>$*Dr!1JP>+=(F~Boua-Xe@4H zl?5pdB8)fU^O!)F1HB?FQr(rFs0koybxjQzI>_xMU9qwl_=bdJ2&c#QGlW=Tc>0Pc zDOzOb=NX4{vGFc|!PaNH=>&-VU%ni#aJZ+l_@8m&pZ==Ha7%F7kC;a2eE(rQ1V}J8 zfq;{YM+BVSX6bBiH|fRDJDlC?S>z-n4nRtS&qsdv;HvW6yNX3WN=xcjbQ6dF%gBcoCdloqfTRGIsw@T37QS&)J_~5ah(~!Ht5Ck;d>3?x8uGP-@9h_QskyLoIr-= zFR>3nb@uW0i3uYByTf#22{?ZiqR(+R5fX|*x{4Ak0uU~2Ei67gZn>Z?{~+T*7(+?l z=x7ZT1~}_iU7MUtN2aWmbdpwH1BVYhbPWv+%dgGNzrTgjRo5ErtJZ?NQg7d50|u3} z^x6MpfMj-db}g5pV+5R7{Arxe0EI#_%R1;ntO^n=t^iyi-I2KtmX2ZYipX1-v)&J@ zP=#`I3Ok3hA@l5~kxViI9;zI`zL!q#h7Bhr&2vbrSV$--Z$my&q)i38DGh>&#SW9r z5cvIQK$D2WM0~fqO|y1NzqJ4J?_6IC+{sEVNQSC z6H;XHV!@vkEl!WTL5%khJK} zBC`wRvVtTZvn4*uA@j5gUQ(i>^$eWED7lqzxCecQ%=syZ${3-hJX7*NM3>+O;{f0x zul`FIdg>(8#4mFurvn^p0VG;eN9X%|@ne;LB2)GD%$QY6dSCMp;0N%!qT+m`{pwga ze<^?qp8VTf=|+mkzrt1&0o_BPZcS+m{n=lAV<##}t7pTd7*)$=K}$_k;d0VDzt{%f z&63#=F7G0vf-c@-39NsUe2YRu5uJrKoePKt##Z9tLxNOG8e2Gz=t^A(;!j_e+5%)t ze18enBNvCkKa5VB%k^H!E!U(jwG9_RbxSMr983fO(fj(dW_xTB&aJ5^O=uMI#F6qq zo?5zhV>Lmu8ggaz_7UMnmkOK~)a&irAFis%2+9XQ$VDaRBMSlL&AW=r3d~Ga~q7e9^i=RIYYG27qK)HGF@L@_X)^YS} zBf|Eyl$3%!zzj-CO1MN3&WP-gHPt`W0&GQaFI6L2qu)XE*lU%=L2;k14F94s?$Et{MZLX*kGIQuxoHK$7F78XVl@4c+3xLtofZnkga_z@hEdAvEj zSo}mF298<2Eh4GnYX)-nJ~~#^TO@XH95QF~Ec!Pj`*)l~XwamC!p=)qoZ@u%4Z-4t z!>EkEEM$_ydsAg80&h=*r=iRi)qv~m)M`I^1mDThlqXYBRi(l;}ReRj~sERystDBoZe5y#! zzaD%OvmB=Cg&$>WmgdP+Zw*_)*D3rgUh|P~^*?e0SS9aIu4sa);rOLPIa~rJaJEl+Mgkz1fJFCw zi1dI4;=VCkzfk<2C*__1&TKV9f1%8E0@kCYll57RO zy$i6%T4NZb2n9zH#Lj4iMidyN7jguDhGvo}+E<9_0ck_YXLt^i*%@%ucsrcavjelvL*4HLqFP{Zo5A;!`XeZC`OZlo@16K(AjF!k9v;;% zUrGU#&dJT4+h|#;H`~mlGReenr~vMN0|u|2+yew^5elegf9P!KmTSR9f)KSH7W64? zfyM3?RC{~yJSNe%)>v%+OI(H+9mDy;n=HGGBlZ(S(k-OSoqvpua_UuoYt1B9{c}^=qy6@}0uJim&C!Pw0$C=g= z8zkaoY`&8fhW2!uj^7Z|`o6A*15Mh^RqJAioiJ{OXrs%?+3Nx;w+jhXqvgr1qo$^^ z;rT9UNA(36V{4kO|J;MC?Wum0%9fUv_wQpr)E;j?mjU~r&Rp2C%W3M;8V9R17KP7- zU67g75qcm{?H6aWH+{v}4^S#)ekeEQ33lJW=Wh~GIk^Rg$+M|#-7zlBPE``#jF!i% zK9({a2y{9mB!n(_tAJ+w6ZF-ur!fy)M<4M@l+^yQ`_c5C?Own!ZGV>kZf&+iht<^h zVCKx+_FEvgzvrIYKbd;ZT6QkA$m@%+i|V?d_=JRnB67fQ*5g3U=E!J~BeoAM*JfxZ zKuaNbn04+NlDsk|y89qhtC;wF9f;UP*MOiPR-b6j%?N0MM1LFWpIRwI>rWeFdRnA( zrdDTg3LH|qX%9})+pU?r(3s%2KY_^F4@w+TE{hW5ri6EAlns(KM$!oBAIXXX#cznP z!0g=1j4ToQ4-uN+@4lQ!8+dYu2pITX#-|PwqWYbM(}jnm7m?}}_*>?EcGU^zJrJOf zX8im0tdwToKNA3N_Z%(6e2XyB%g>KKM8q-e+sLB=cK;pRjG zOT6SqCWZfgJ(Bp6e|fQqgK#~7dvWP37cKr7SOme=o{fyFhGM!FlkTb@>o2;B!vHzrjT^<|1@>8 zI_Yyi7Lmx?epe`<@qgz|fQ!Rp@T@)#F%N`&;y)WWVv$%W5#p5pWbOX6oFwJ{Zb1oc z=-2q)Zv%IAevNH4Fg7kmZ3wv>n3V{X4ZC;in=TZ2`VVF2j82+@;5vuC>js=tI{EOp zxc&~G2t~M1*lptFWCcV;A-acf40d`O958sciXJ|!aO(>x;+J`d*q3kZ_ccsSvyoqv zhQqajka<+HkpH}1AgU1rQXF;=CLLHizv#>#4Xs$QWJx0VCoG$iW=D>|k<@@ULaTzM z)1{V!g99w1svZ>OFAY7!4Ez(`z{6S#y%0;>Ql5%VV;1vS$L@wa%>}_&4DXPg(TmeSQk_UAs|v?ThTsGnkgl*H@*mX^5h9zaG*ZL#x81~b&}k&<;AO4H?#x6 z)WK4Q?hE8UdVlFtAAL9Q2&%|@44gTd`F+7%_pUEDC45zCLz>TjU))Vgye~QP&{99EUVp9rViIJ@pn+VypB)>Z1NDvZ zd#oKD&q0jYTHH=~o|G|ekvXO`_?kwK_1bH4*Ls?>IL798AJ$VSt~m)ow$40g(XpQJ zvrMo1n_**RN*HWT51r6VKP{J{EOCBr);l^F>h-*k*jUXbMyv>T&M=ZJLCeLwJ)U|I zU@)o)#3~)CO}~Po#%*?G0{`Y2b{q2$Q4tZ>GiPGGx7OW*)iTYo`WcBoPO&hC$+Vrc69^5P8o+628=eH%HDql%=w0Q(sCbp zX4rGVu%zzPDY`oK%9%-jKtzE5iXKJJW86P^{382Lg<)CiZm<9&HzT~1@7EV5emJPu z7VsiS>usjd;Si6_?>L9pGgJ0$36yR0C~TH|$yFmy4IE_Qd>Hczg=N}b3EoF*-Qmm2 zI7FNivjFu4Wo-YZa z>qKLsvb=I{A&9QbJ)3&^`%653*qyFXUGH6$^GUb%E(I4KXN&qE==W=xOZyk*G$zb- zeu#VW_SCnzg*U6U#e#0FJmjyoDSXTLeZj|T?iYohKlV6d`-RbaMHW z4yE^7ww%i~GrQ-^?tE#(?UfQXcgMweZvUA3@Z(5*+^aKot|75iu{FIjQsTK$$KySF zqV^x}nY>e|R1&D3cWiOc@aSl=oxuu@lWFiGWgSV+yfL~j&0UW{GSlc|5*YNa=~Zjr z=Cku^<(n=I4N9!ZwVJnu3XiVX0QUuweY~llO2FBuL^UhArnlYZFgbo3^>x1T=gelC zY391YEeEGR_w>9tE~?qL9m-5CYX~}~6QD0>x1=cdKnM!IWr=f#l*OjY{GrF#%r*y! zql=7}JjtU4x#m{v;iy+}CqTyCWA^k`Oi~8klJ-}Hd-dfj2=_sm)zo0EO@u;P4;Gh{ z6u9r8!u~PHU`#jx&KmSUe2F;wPhAFgP$iak$8{;Mi99_4J;b6SfHy3nVF%;uR}Y}5 zD8MJCrfAN3(==^Y^~Fc1@-zdoAD^`SjqBH0_GG#y%KiF&@WL~d|JSSI#4e~IDW)Ow znL<5Zl@aBYqcyJ7U8C2|Yqq&uUF(5M-h1a=^1r_OmzGK=WbdGs!p|dljevf0niEzy zBUF%~FAn5N!u0z?tL2Iox;*FUn`TqiIRJ11o*~H1(>}TNeY&3n9YI#r5Pw6R@Ukuv zu|so@4y&u*GdVMFJE{`z%$L@LO3q0Vc)HYymF*I3`3O>KGKEyByTzs|__Rye@Qc)h z3nHS>*}n8+Vo5t)Yj*kg;Pv%1BdL!fGq-c@tzuMRc@TnziNQnEoL#gpR(4xiLuT|m zE7hj0M)q5G7p(E$Mi+iuR8@6sWXwrt@NQ+X0KD3EO|+_GuB9|t>lRJ^)uFPwo&{le zTCe5mg$|mX+Pl_N$swlR@Q$7(k~RFR2y)EG(anJZC0|dB3tjaLas(9TsPT}J6$Nvj z(+rk%VmGgC6VeVqyD0IB&|gW`%hk9;28>j)Yn9vO<$Vxh2NT)HZV0Bq8rv53ES7E! z9*v1vK1hgxRe>h1hKdF!cVr9u&qkY<=*3XlA<)Wd#{*Bu`p3;RR2bZA)~*$vz1o4r zg}xjaQq>jd?PzylrXGK+$fMJCK2Buuk#wvObq+?@ie|_GzXnuVY`#&Gv#a2XmG=C_ zIagUdl{m_KO`O>zPyd|5wQDcC2HFzeKPxLM!yZF;AbmdTM0->X2C5qL-MPcKMhku3 ze?8{Q^(v$EnsKrFF;3CTu@O;DE+7fPyuOiMbMk$0V^dS;_9i!FY#XreHrZC3*zo(Y zk+6Hk4H5$S2NVft$D_lWTHd#{?MKvP?N-e@8(1miAe8{q`;Luw+>mf(0qdi=oYS4v zjO0PJis~9_a`GZ3Cf!05gA%+J#itZX$nRA{`I07(I_M&$j$OS-Xx~2LsdcNZUlwab zZf`WDt)Je(Ex+%u>IHD{Wt$O&0EC`gh@6?x8&Gh(Og#4_eCpZsVaDK~uyla~PhN|E zoWiFAuYnaI46Lj`;cn&)#=bN+n$6EZd`r^e6px8|w&wQkV9w90ehV{|e)-wtl1-5Qg zwJ=o-tJl-lZ!=o*dJRASYJLF78kKFlD=cU;X=rMO%^074o;e{G z_H&@^m#oN8e3<(*^Ov_u^uW@z6u~Sp@e8nKD3&m45P{vbSd5U7m!3)(ee?m3RV1QQ{~d7ONSo+jK6u4ZLVh# zEZ$_(iIGKrUP!yjt z=+u43ujyuo{Eo>xv6Xm_(q2+%Qa2wV$hY|`HX(-|^-wXvm~qcHlOpVYzDb}*;Y)B> z5uXn4(pP;^r0Spd$|pwvCaeB@6EBNDM(S9dWZLI%?&>e&~?^?dVm%F8w zhat4FqkxdaC(a_svc`QmqPw#O>Q?tZTS>awd)3g-93%=XDM&^<+yoN{I*eD<)whfa zgz%QrE@ch$YByimNLpFXp1nvKG`OP}Ae)rZvjZwk2%*5wrG+q;;+L{~wn$6IsKa%h zcFV|PYE<|&tzynhH8kxVG|GpAy6PkjeCa6Uf?4%f_teDju}SMRNXbD)%BYG+&}RT@ z5^sOHbFLh03YHNnAA|oPz`{g!{CMx(td=Lt2Pqv+cAS;F73Z_t2W6>jz>0Su% z8NH>099sH^2*WdgZ)qV*{bOkfI6L^^cSX9Ipk>Meo}u{r1Y@*D6cikdiMy*(D~qgV-kq|sKLU*;xJ?{ zW?{YK!+7Y2uF%&|2x4OxhKG!{45tF~u@eRFE;24`ROOu5l+Pzj?NT~H7?|oKie|Rf zm()U{{~pTqf?x7BF}Jdx3Z1RjDJpj|cQ8tjkxmvF+i${Gol76NMje2$+m5W*$x1t1N(s5fj1_G2)} z7AVWmUnj^{!1^koC43694%l6k-{oDssHWIrK7)=v!%Y8=R| zctcwrl$*5~#z8wm!!23&mkywKx>LA_0b~w8e*7@;2GnV)z91}RZZuVXSgS$B#G9}{ zWF2w3lKT{e6q4L;;sm8qvo86OQGC%&;YdCfAn0h>-U2prxD{u~*>Q$RXw0pgO@fr0 zw_6irJa=h9r4S)@Z(+4*4+z;@y@b%#Nu(p$M_afux1=8Sk|J_(EFQZZ0E+msAW_d& zn94u$cIj^0T8^o=@7|Rn?Lgww*RRDW2;2I34U!b&RoNK_E{VfGbIl`|Y@bIM2LZo2 zB;GqZ9d2ZCx8?j;|8p*b@5dPkE0t}pf(y6nJXKSe{;0T^&h0ZE5Q)sOKrY?jwnt~S zuFLE6_`>RM^CZPveA~9=(BBnqBjS$)w`>8;0?NjBnecSR75_CB9+hw25dLlyhK08m ziRbf`2Oa{ym;dl#YVia3Z3#(B$X-!#-RZJSR99HiMc*LmtN`U9;?$be22SR=)}2>^ zA|5l%&1A>dDyy2EKa?FRgc>pF10q5Pg<3j2#|9;w-`}xI)r#5T z>^H=htvIcG&9a1Cbw<*9s#c@b*4AEQz8=8twgLTz6BvC~ zs^U9#+zQr%eAc18voqnLlU-ium`((pzU{f8q{d(a1CWs>|A9r)4Qt1aE+JK&Nrv^r z&8;YCXG?ciSA&y>M{$s1-auR7RxP%5lA0wY)UfR>Ys36I01^_3DA6g#X8Jz)5(-~-*2!`Z4k-t}TEcxsu@aulpK`Mi(m*_6yUMB+baUR?mzVEV*4apx zJ=+qsoFaHK;p}~cB_gb@0KCL_PKkP6(qp1mjbHVHOzQMZC zhB>K_!+N=5-fokGV`nqS>9h<3(U{{dw=?Cv3sU_JzBQ*ebsfi|du}GVm3~cDVl6{R zrO?DAFO=`!KW+!n{FcYXb%170)r?YHExD{RI4By@iEnRnJ5iKfFVd5wY7@)grHWRB zxfBBBQAC2;t^H7k6zMApyR3%V3a`u}0dqYY1$xJaJ9{?P3Q3f_Q}c`CULkZp?_%so z6*>*1^&V_m?>(wZp**OecwEs6DL<^vXIAdzDcs&`{`&RnY{Ts6(QLY}uP*|!+O|xH za46yaNFpsD8leo~WoK4pl?Ux~E_h#Ky>bsfFRy0dHr*P(IAcqv(2^NQAToLw3@@76 zOyBM$F3+c?r}c}G?ZYv+;klee6pfqjKs`s<|Rr2z*+Fn+II2E z$`x)Z-rRqYa6lAexoaTQhrUu-AgY#6nrFki`zK(^Qxk;BSJ_n9zaUxa;OY4>8QVyW z3+|fmyg{-~+Z(`w;WJDp+I&xXjB5)rmEv@#iszaM^WWzT8?^!44y5PWx=2Ev6nMd=H=xPZ04X5d)5VPze0+-&V`;_{)l|i zn(PD5Ze#i77L#;-Iep8(IMmGcsbAL;cJuth38Q@kXGn10?lx%q$_j2UQsVU3w3wyU zozS&0YY|~wUSTKw)?*zAag`IMrO*5IPFDs4zXFFG78y~oD@E!VD6S+G)>;ZS*Klzz z4lXXplMQ6E)DTsCL3$UEY{ozWmxDYigB7J&w_Fsb z)d7T=@1DFaq6wj9mHV;R8((`Op}+&ihO*1TTeV|xI!`a#?Z>C~saN}Vbs$BTU1NLr z>}GlSxx(YvLpEC;xoH22;53W6pr9waetOE}a5O#KeLB1e$3eyPH)+rGwN>jL_f)@n z)g^AUyKn<})qIf|FEGVM;W~7dRL?SV(;7!!&)mmNzEblQWc_UvQz)apHS8Flwoyak z+wT&zSIq>0JsV*=IrY1g>{UaJW@EEi3=uO`r;DQm6B1Z1 zLF%tM115k(l32Eo)mLhm7v%ZG2uG`Y7C4Qa%(DGK8Oh(RrN^Kle7`MEE8_pBfk#pp#aOaXvY$! z!ozZtmr`)H0TLI=MHR09A3q&eIq|Y%(hXj?!KY9_v@w7HL%8T*cy8Sg9?)NhPa>_{ zcaHVE2oX$&VjgCHdu0c2k={b)FI>4t9_i`moI<%F>IV;H=!qyLK8?eNQ?+S!JyYnU z-_AA;l5s?Bx2}JYOasaOqDL_D8KNfptd<=_vW4x&KEf0-JiL^Zm8fxu3gSnPmSHar z@}oYbvZA7yIAA~kbaz7TLR13K=KVx~eM@>e)NxP_71lOq!MRgWA%7MK{7EdM zvN+qi2owr=*)SzyQb;YM~Iv3)uJ3#P4WcO{W+XPY`YVJ7TsG>IAVMgF>m77o> zf|RI7f=;)3WpE@sK8A*>M>JBfSwKL6PVKn+YCu{LHXNLTD^4?7;#$jEh}Ga!S{8)+ zyM~>;vKBeT7BGEYUTVcSP>qc8nVA{Y8{8XDUaAFj z|LnN%Mls9sSl9!lFZ`OoXQxl!uw#~PGu?&E%S06+OLdm?U7Qw(oqk>59)UnKwBBl~ zIrfIer<)Y^K%{E2r`^5W9mIT6BdUKm7WdjW_yVNa`vTAgRU$lFDEnT~((n{g;;zCE z7nu{SulB0hE~mW561MR8L^vdx+_0r9Dk|E&iCxRdxyQa?L#;*D3S0KYi?3i~(_MD- zXRpV6AkJ~@yRyj6F~o2qrJ8iy1i%}R=I!21uW1e0zK7do8FKAvmf^Xf1`vtGcVQLH zfZ_Dr<22lYLPylU#2gEH5jW#rQWC7Phj$wBFpN97p&pB%kssVE3Z!izNB`wptGRd~ z>w!nB>Tj#_F_yn@U%E!zBKG!eh04!p^Rjkq+N6knZfRo`ntGs3lY!(nol=|eQD9L$ z+AUM`I%@aUef#LIthSnIlr&rYvR=Gr(@ezWPi-g5aP&yVz{_Q4Vmm9#76qA{xJkh! ztvWwq3IupQ5YG07JPgh9+>8QFszI3KT^a|8Y&XSiPpZ8+|M&@eOYM`EJ`dRqkz5G{iw+$z3T{rVlkF! z>gw&i$-R>hZwW4=c!~Atr2q&*5I4h&8m8c23BQhT6q<~{E%xq2G?x)ENrIcmIrSel z?}2erhbj64QV{+97Y^OnM)&ma$m2M%Lx8?E?BV=%TwbfSz}HsTod5ozI&8dLXmWuK z(0)!rJjun)jr2{kRBb-!zoS3EscR;2`m+*Tqo^>jxx##;u$+QSuN+ifNLsV*Mz-AW z_;|_`_)r8v^^7?XRXaJ<+7OE4s7mbz5pKevQBiHEji3bEd$PR<4-BFL?mi6*3rkE) zB%-EDO7zq*s_L&y&HP+wpUG|Y^*7s>uUL^%T?~(iSyFU8=97evpTm~Jd~7|^hH|r* z&iKXEWT$0e1^c_|ldOVqhk!#hw5XIHNObdT-Xg{(K{DMCFAy$D-wCCrriMn+t*xSv zP)UWycqU!7jl`y}y=L!4P_CVJ%YS~1{V}YrR*ski2RLySu`;=MhAE#XHtZov3vjz;1 znIVxU2x+0oMv}2WEd?Yqa8roQutv7Hd^C8{-RSrCUbg|m&WcYX#`|*@73m3_w$k$Q z6(~6Mo&we3k#b98Fk3Jk;TKc;mz#Iin*d$>j2|Rf^#an?73gD?87Pr)^h{jP@YgUe zvWkvH?gowT<>duE)`p5BjxiC7c}QXaEeL4ESA77V2HHfHrAv=`=0LIw-vCT`yC!c- z2R-|J9uqQvQGaR)RK0<25UYM|$$X1>C);vuWOp=>(pJ~Aqe?&&G8tj>Up{?0`uO2j zn?K*cpBR{O+d(?emfx9=*o=fJF{yulcZE4aKNgb0*k?x;9q8U1FEEb`T|J8>`sZ{b zA`HlzTF-hm|GC2OXOncU8Ncn;{m;vg`1Ieu3N6D|5;G6!?C1T&FOhfxE;1j8^9Uwh z(pTkZ;sTwmzyDyOE}rG)Yx7UT{005bS29npsIP!#uFVgpX6?WNl5r{!^#qo`*V+<_ zvKu_^J9eBZzJ$RWNbK$!17fD1E`GB<;P30bsC1JMVdS+ir9C)l#?QC_c`p*L&>Qsh z_G%2sAoV@43Y%j3cWgm4#mm{?O!h>V19wLuoIH37!EP8;0An!p!wGBjyd8hw&;|Ag z`)1FcboTyLF*Be8Cq(cdp*^r|+A{qj&FOkQ@_)O!yN8uQN?SL9%S~zhYAJc5KsXAU z?RwdB60rHScLfwllU>pCLj5$N*mpT?&Mnd7kq2+`^<+U{RLuwb@6cA?Es%bN=GfR) z>H*D_lxf&s_vOspZd_6pqMFND5^m)VMHgUE#9RsP*a64<3uL#Iy}>RD1Mpu#C}iNo z*9d^G#FmIh0R8JU1!8|b=NNluQXe+EeB>O@R}enfKJjS7F8aDQ{S9_?OU%C!Np0oY ze#CwUb0j!rSYQ1El>7I~3P>nq16BQAI#hmaAes>~^#DS=`jn-EM565ErVk7##`@Zj zjF_wNNO-N(IT%Kq-{$b0^&fnSUqRUHY91c-Qo`y8P^=)@>mc9;RFhFKrirh)xzKX+ z;DgFL0_j&c>cZleP&+n;={USZHphWID1-Xwv$^IZQKNso7)rkxCc|Y!2pl4a!RlBC zKt$o(c#jFeOd5;t;)6PspfHk=+1c#3?aX(z;jWt1rl(QKG9S}PYFLfZqu&W&GY(tE zc8-?R*wX{8V$sBK91Px3QMp{{kpQ_}me1TQ>?yXD+YwT|s}-2d(Qm-T&;6;VNNRJ1EZMB!&y*uEFT0H*e_??yHA-N~<)QwlncUWc=MKW0me zOYZgKdvYeZ?jrLOzu$|QYPAMqhmIeANkl){cdlNwiVl_eF+#s8dD1RVpeP$w1f-9~ z%6Ye2l`+}=Q_)OeG|L{#$9M>d#DgYau&!s%QYpMQ>^ao~X*a(`5$h9=vd3M-c>@|# zRYi>%ziX`q@kvrNqi9&2`26{1w#3|}js$3q$mC|Ayk8IGI~HwhUsLN-w3Ol#94X4T z_`^vl4z~kBJ7d-|Y)YST=}LJanB(i()LZ>sUCn%zD?aXT>^`v2N`ct_jFj91tlZHL zwzr|+F}wr7IPN5-mmxQtUKCXs>{D_AHv(YXZte<|11Cqsm#OJ`&suE#!-i@>%TtY@ zO`g>s?C$ThfU5^;$ft>@bFYAs@B9WSlg zSf5zrPqR|>4BNuY#?Q;o|Hg>`2ax;MhPw+zQ#UK@?}1v6 z`OCX7$hoZ&G?Jz`q>Vl9-2q5dwM+2q7-mV@3{ZT=yRX5s2SIV+jeE4c;V07SS8PxXNQwBy*DOGM46AQACXE=95CIzfuD=URDfmQ!^4HqMWk1`-Bojl3_ z+o$<$#pK(H+3x=S+E(Sfg&x6f`x{8cx8@5)&gniYo-quCc;d7AlKwJ^#O;ufRU8~- zFoirL!W+$tPgPp|%JI$CeSJK`FuR|@D1#r*fyFxS%<0p2YXRWjTjC08(J&qe6bLNT zRnwD`jrVW~$Agf~{0~9d5QvIQlDqR#wtni0xxSVBjB11+sD+~nOaAjw+r5{WIYn&U zNKHxJZczqhqd2B$)#3DaBbk&F`CnsOL2QnnfFQ;?PXNbE^Oot)c{N|27~STl0dXSA zu#UT=cB}yO4FyPQZiuoLzZre+&xwFdP`i8j7b+x<6+#w5-YYcu0=WC?^9VZ!+U1b$ zISjzm;lHeY(NEdYF@sTP8>WW6Li5uIfQyh4$5(wZ#o2nI4}{gvLt2G7KQy{K&|-KP zhF2sUqDrqIZJ@e(HgEX*2o4vdBlCu+!O_!ZSXPv$ruJelu;Elc4*d|4Pa-(6zIV&X zSr{5~6_ncBW!xz@NT%^ECf!;ke$zDN@3%cy8QgL21Xw-jxp{a@L|P2)U>8EPP>qJ@ zdfvsp1=t4(N}&%WG9h~d%JI6UN^a95lO|G zEb5)twCi^%7*N>_VdK0M0oR3;c%G1}5YbwB>i_y*qH=VHAB*S5AdBoD-g+^Rjre1v zM3Ww7X|cJ)Yf>kEfnGeo^aQWwlPte9nTwGXd3NSCFXqwu*C8E~P+yWa5$q!|e(Qjs zAMr&(CYg#`rTG-UMhxR3UQ^_M2+&MLrq@3|{N4Kki4=Ou69d9f^8O|*=f`iPDgDP6 z2^HtR{VIu6B!K%NC1p4JE5M_gAK4mir@CIUkZMT)!V-Cj)M!w9NZn}KwR`B}#`BxE zq+qz6jg-S==N=vDhdB9qxn{qijx=`OcUv} z+KUGgBeT#?Yp`HwjdlR`m`E-e&-%m49e&}AR=~v=pQIVPZy4`9>lb$Fnd?)?d}zA|R!z4E^8{9~u^rab zvSdhXIkV=E4 z$598Hp@_l6DxLjIS@^*93GzO8#$b{q>_^BLuAFFmEMkzc4cTJZ+XYxDGzV(ylI})y zgDbdqSOG^uNGrrvU}j`AXc?rTZY{R00Q z027QBNv_($O3^E-#;_&Gl}wERqE-0#1YSnL;*Col6Jtgub68HnG(`A!wh-V)2jJXa zE?P@NE48V6{CCoIeZTyiOM6zvRL03dvQx|x9iP9$ob145#5Kz>g%xtVp?43(U#t6f zz(@e1goXgXKxZhz3^K@*FXd-}bw!->@UVd)8T3f1@MCa2=fKf5n<^Jz{I3n>k-OJ2$fmow{o^Da!!C9nkjVT%$5)sBxdTFUh?0mTMpT;UZ1#fvLnZaC zt*{qIco=$*kPvGZmkQ`)KRm@kL`M?5UjB_83cKG^B!6r+%raKEj{cuWpupsj@|>_5 zt5jNaB{zc@ux6HMV6QA0gy+ysZz<&p+t#6W&d58)T}I!u<4V*57PD;$9IKny=OgFd zl){Ip$VVQ2n-)-gbComx?e8TbL}$0OB%(^?JV&ZFEG5G8II-bQCqV1uX9o+e}6}AH=WSWupd*%7hUwGWalWp$;P| zaRt#WhAv}$akF8t?ZJ(!W+c+m%ZHQ{$c4}oDvh7nN^=NrCHr+iuGO-JEJKGLA=xPRp*V(Mzs7oipZB2k{oaxJXFiaH zqDOmZ4f!4RkdNQKX-5{~={L$W3}Pxp7Da7J+FOhBLA8*X?SS7?TDlY(h1()cM2JyY zHy&r54M}r1r1tMO0H73YTd_Hd11m~@DFu}UmbcsK)A{V>{R>c35YueWGA2xws*V_r zO!n@)cu@hiuP>F(brC*#_dk9F0{md6Vs72}o>#eK?ltaZhZA=6eR;-~`rYnr_OzTt z(RnMYGwQBrohmiI#N@f|2%nvOZG32YJWg)Ltz3exmB7FMWP7YjMF*hBbr1`^P0>0p0u{lr z$&nUDzQ=GNgjbgXSgpp^h)spe-juSfeKl16ZWd9_O+Kf6rux>1xX>G7XrC~X9{9KL zz-5}qXktU(w{MNvX7!w+tvO~t=RSX#(^_!4KK_|gALew+$n@9W*?E}CZo*QaRk#=> z5tG9voW)-a@+-H?%04_dwuUk^I~i%I4KIhDeJHbZpFfvwPT+Ov7aA94#wZDLN5fe3 z^>P{*&#&)2Vm{zC)i?Kmn_up0_QP4t)v)7_jgQ}LK}t*7a9UcfF;lp~uAux^Z{H?7 zcp8Z&*RHF2r_;G-m)Ap|8XB@aO=8o74RXXKMXVmqSCc)gcqHb9)d7NdiR zUL~e@OS|*q4CD_G%aC+zF19wh8-4Kd^4^%Fmt~#_Z`1W7LwL0+W+)yHon>3rv74=2 z4~UB^In#>JRHmibx~&bmapb_xdAWgYNw;Qk8QoX3Xsxt$x;u ziYXo}JxTxmC0_Ol8?RbkVc}eVrb`>LugWnu_rrbB;JwAiUS5cq`z6^sz1~O0U%uy! z`8MZh*UfvBCpEn}18s*M?^P)I+*TMB9IQRi>YWhc`n;y*+F2DUdp^_f{0=U)lma|p zx1ATy>cWV}>nr&s`1l^%O^rtN_|P#jwcr(|cz+*uVD$ID_;v{zq&pJ{mcD^E=k{hk zll%OlpgBcLnwOWiV)k58QDs+`2F|CQJ3Ff-H_LHtyPBa#Rd;lZm=f7?tS!c6HvM@0 z!!#zNw^ED~4@83QI4O)1Px%JfMWw*QRFu4;Z=W_VvuN*l?aW zKX0`xCgL&G&wdV99KR#Q`E!u;asLho`PO46I{wG2@kE z2?@R-_HT0pGJU=sp;TP($3jGgv{raur{@nj$X8VC?e~H!L*NXeeKIiU`|YzUp$3LW zuWP<2(1>(y&Fs|$J4)ku6X`uJ$v} zpFcbbzF8U3M0?&pnw$J#4L&v{IWk>+V*d6Gtf1V!Em&&(CdwZNCFior9QynQVB(%9 z+Q+#XeSM-|_~J>(T^En2i2*l!cnRhC{KHyZ;%|QL+*ED&KvmtP znk&O*`401MLjREbPQ8DAJ6K8SBVO}BskOBs^hMX!K#C?HER0WQFkdy>j#X|4FVkKW z_4&Et_(WIeS`(8AG(S3x1on#E*z2=WiHG^qFI_dGHKFn;2RF+*l5|WB*E7`g^j6tQ zQ>Q6p?euR|OMhh>lRV_0q(?>gXvrcs}MQUF7$R`&8kxlhPB&nMv)WCiaO} z9MS47HX=Hk@Qd1hd}r{KQ#F#{lbegIC_6Yub2~TX=_yFG9dR^+yf1K%Zx$!yl?~E3 zn2E3ALK6S`_q@IT!~cr1P&$3)9(SqMaiR{dxvqJ)wQC*m`+25@T#Q#mOK@G#Ese}G z>;KnR`(OR(|J4ukF%uOiG0u86T%34+4SOCll>%l~QBsPPJs&Ykb(q8=B9UfjW_gI5 z)`imEQo35(q$~dV^ku0HH!4HLS^GqoC%U=?XoJ z``XR2*bEj5S_SF#(P9pP^c4zmulUi zZy?07_nAxe=7O))SSk~Lv0*{xa*FM*?xSr(-1G0(e~d}``mgLAvym@}pLcs!>qnHu zm_ZsZ=PhEXquBh{{e#&xYlv?ei{Z`^0!2dgQAAGTbJT*K8J+k2tZg_%p}Sr6KVJW9 Zb8NE428_;INzKH|9a7d-%2BlP`!6MazeClientMazeClientMazeServerMazeServerУстановка соединения (TCP, порт 1024)Подтверждение соединенияОтправка имени игрокаПодтверждение имениloop[Игровой цикл]Отправка командыПроверка командыОтправка ответаalt[Команда "сдаюсь" или конец игры]Закрытие соединенияПодтверждение закрытия \ No newline at end of file diff --git a/doc/multithread_maze_server.md b/doc/multithread_maze_server.md index 9cb4543..7658866 100644 --- a/doc/multithread_maze_server.md +++ b/doc/multithread_maze_server.md @@ -3,7 +3,7 @@ ## Протокол пользовательского уровня UML-диаграмма протокола пользовательского уровня представлена на рисунке ниже. -![UML-диаграмма протокола пользовательского уровня](maze.png) +![UML-диаграмма протокола пользовательского уровня](maze.svg) ## Описание работы приложения Сервер `MazeServer` ожидает подключения клиентов по протоколу TCP на заданный порт (по умолчанию 1024). После установления соединения сервер запрашивает имя игрока, а затем начинает игру в лабиринте. Лабиринт генерируется случайным образом при старте каждой новой игровой сессии. Гарантируется наличие хотя бы одного пути из начальной точки `(0, 0)` в конечную точку `(2, 2)`. Добавление дополнительных стен происходит с соблюдением условия достижимости цели. diff --git a/src/server/maze.cpp b/src/server/maze.cpp index c2a31a6..4af97b2 100644 --- a/src/server/maze.cpp +++ b/src/server/maze.cpp @@ -7,7 +7,8 @@ Maze::Maze(bool _test_mode, int _steps){ // Инициализация графа лабиринта и его ребер - std::vector edges = { + // Индексы направлений: 0 - север, 1 - восток, 2 - юг, 3 - запад + std::vector edges = { {0, 1, 1, 3}, {0, 0, 3, 2}, {1, 1, 2, 3}, {1, 0, 4, 2}, {2, 0, 5, 2}, {3, 1, 4, 3}, {3, 0, 6, 2}, {4, 1, 5, 3}, {4, 0, 7, 2}, {5, 0, 8, 2}, {6, 1, 7, 3}, {7, 1, 8, 3}