From 0ea6fbe2951e9cda532c339d3dc2ab06bb4cc049 Mon Sep 17 00:00:00 2001 From: "paul.albuquer" <paul.albuquerque@hesge.ch> Date: Mon, 18 Oct 2021 13:55:25 +0200 Subject: [PATCH] added lesson 6, fig. 8-queens, version 2020-21, recursivity codes --- lessons/contenu_cours_6.md | 97 ++++++++++++++++++ lessons/figures/fig_recursivite_8_reines.png | Bin 0 -> 11151 bytes source_codes/recursivity/lissage.c | 66 ++++++++++++ source_codes/recursivity/rec_binary.c | 23 +++++ source_codes/recursivity/rec_factorielle.c | 19 ++++ source_codes/recursivity/rec_fibonacci.c | 22 ++++ source_codes/recursivity/rec_pgcd.c | 23 +++++ source_codes/recursivity/rec_ppcm.c | 24 +++++ .../recursivity/rec_puissance_indienne.c | 26 +++++ source_codes/recursivity/rec_reines.c | 75 ++++++++++++++ source_codes/recursivity/rec_reines_skel.c | 54 ++++++++++ 11 files changed, 429 insertions(+) create mode 100644 lessons/contenu_cours_6.md create mode 100644 lessons/figures/fig_recursivite_8_reines.png create mode 100644 source_codes/recursivity/lissage.c create mode 100644 source_codes/recursivity/rec_binary.c create mode 100644 source_codes/recursivity/rec_factorielle.c create mode 100644 source_codes/recursivity/rec_fibonacci.c create mode 100644 source_codes/recursivity/rec_pgcd.c create mode 100644 source_codes/recursivity/rec_ppcm.c create mode 100644 source_codes/recursivity/rec_puissance_indienne.c create mode 100644 source_codes/recursivity/rec_reines.c create mode 100644 source_codes/recursivity/rec_reines_skel.c diff --git a/lessons/contenu_cours_6.md b/lessons/contenu_cours_6.md new file mode 100644 index 0000000..0f59c42 --- /dev/null +++ b/lessons/contenu_cours_6.md @@ -0,0 +1,97 @@ +# Algorithmique et structures de données 2020-21 + +Contenu du cours 6 du 28.10.2020 + +***** + +## Récursivité + +- Exemple de la factorielle : n ! = n·(n-1)·(n-2)·... ·3·2·1 = n·(n-1) ! + Donc fact(n) = n·fact(n-1) (récursivité) + et fact(1) = 1 (condition d'arrêt) +```C + int fact(int n) { + if (n > 1) { + return n*fact(n1); + } else { + return 1; + } + } + void main() { + int f = fact(4); + } +``` + + + +- Exemple du PGCD + Algorithme d'Euclide pour le PGCD de 42 et 27 + +> 42 = 27·1 + 15 +> 27 = 15·1 + 12 +> 15 = 12·1 + 3 +> 12 = 3·4 + 0 + PGCD(42,27)=PGCD(27,15)=PGCD(15,12)=PGCD(12,3)=3 +```C + int pgcd(int n,int m) { + if (n%m > 0) { + return pgcd(m,n%m); + } else { + return m; + } + } +``` + + + +- Exemple de l'écriture binaire +```C + void binaire(int n) { + printf("%d",n%2); + if (n/2 != 0) { + binaire(n/2); + } else { + printf("\n"); + } + // printf("%d",n%2); + } + + Binaire(13); // affiche 1 0 1 1 puis un retour à la ligne` +``` +> > > $\hspace*{36mm} 2^0 2^1 2^2 2^3$ + + + +- Que se passe-t-il si on décommente le deuxième `printf` ? + +## Exemples et exercices de récursivité + +- Algorithme du PPCM de deux nombres `n` et `m` + - `ppcm(mult_n,mult_m) = ppcm(mult_n + n, mult_m)` + si `mult_n < mult_m` (récursivité) + - `ppcm(mult_n,mult_m) = ppcm(mult_n, mult_m + m)` + si `mult_n > mult_m` (récursivité) + - `ppcm(mult_n,mult_m) = mult_n` + si `mult_n = mult_m` (condition d’arrêt) + +- Puissance indienne +\begin{align*} +a^b & = a^{b/2}\cdot a^{b/2} & \textrm{ si $b$ est pair (récursivité)} \\ +a^b & = a^{b-1}\cdot a & \textrm{ si $b$ est impair (récursivité)} \\ +a^0 & = 1 & \textrm{ (condition d’arrêt)} +\end{align*} + +- Suite de Fibonacci +\begin{align*} +a_n & = a_{n-1} + a_{n-2} & \textrm{ (récursivité)} \\ +a_1 & = 1, a_0 = 0 & \textrm{ (condition d’arrêt)} +\end{align*} + +## Problème des 8-reines + +- Le but du problème des 8 reines est de placer 8 reines d'un jeu d'échecs sur un échiquier de $8 \times 8$ cases sans que les reines ne puissent se menacer mutuellement, conformément aux règles du jeu d'échecs. +- Ainsi, deux reines ne devraient jamais partager la même rangée, colonne, ou diagonale. +- Le problème se généralise au placement de N reines sur un échiquier de $N \times N$ cases. Pour $N=8$, il y a 92 solutions +- Il s'agit d'un exemple classique de problème de backtracking qui se programme avec la récursivité. + + \ No newline at end of file diff --git a/lessons/figures/fig_recursivite_8_reines.png b/lessons/figures/fig_recursivite_8_reines.png new file mode 100644 index 0000000000000000000000000000000000000000..7bbe986203f74f1c90fc9a87e86ad796e5d1894d GIT binary patch literal 11151 zcmeAS@N?(olHy`uVBq!ia0y~yVED(tz$nJS#K6FCa?0LV1_tdgPZ!6KiaBrRa>s}~ zy>)<nXHNr9ThI1b&j`btK{rn2>Q1zJ5O$!hvr6crOs1!v+NqzNNh%s$UNPKLn43I; z7S(yKP!LVJfBb07SCNd9S@T>s-+i;=b*@L|o(=bTI+n$6oF4h@klp|Jxtn(z>z}v& zeZPF(%(<1v{64Lp%)t;LUv{OwZgQ=UEE|Kw)NSvVlr8IHWbk2L!5^X7zvBPV=cUWK zm>GHwWUptppHWwHrT%fRd5<&?gGA@w-{1fL(^Ro(n9B5uIjrmGO8+Z+zB>83M0X09 zma0fi5N$oS;u8PzPd>6IlqYODwRB^okgC?Ls+`3Ku3Wrx++_aBqbvCh8mByYuC1Kq z@4C@fw(}+9*R@<hD^+ghe3*Ak<JI=?V@pK5Z%tJ>C3a+Kew@yM8C%`Ah3cL?pFd?{ zg~O$1O&ofg-!9o?nC)6M)x~dtMY&_yQ!U2kXH$A#Pha{jSKZ*<91XKhgE#6<Tk`xP zV{1Iz7QAU_nUiDKAK2{jchiNhYv(S>Ire3Zq%?mXN5ZCiaxXJ4`{{HiX1Slr3O{ph zRi^sQwjVxQ4{E$xtP_}ZHBGMXM0WTY|A_P1rxF*5H<?`Z;3_lCJ@(W(S$SI8PlKqJ zn?B7*_1)8SYZ8M@;I`8qYK4NPnx4IL)*Rl=wBg&M6F+62#Hg)RJT+^{46o_E^S5#q zrq*^<WbQiuFh@<BPgv~Ax|#Ni1Mh5!JfX2+-@Iqr-v}*u`_%CBQ=V!s#g$oi{{#l} z>1ofB-&ptl%w6t+Wx831G+q@mx$G5wb3r5V-zzmsr3VI?=iTS1Bn9&oh^d^>iHf{E z@6_X0x2LSx=OwqHsGPx1yS4ahUVGb=D;_rjc^SX79~0H*(}+8}#55~r?UaJYvsz00 zZysvtSoCx2+KvM{Wxk$SA0E1xe#zOpQ!vn}&35U-PT{JmQ=+Y#%Dqyrv>&uN^UtvB z*QZ}+zBJ7WQ?*?(iN$Jq!VNj;_tE+m?CQ6s^2`d-nzDocwn22bldHm-eHQ}e^eXpk zQ}miSDd#NL+<Eo?Ej{-gSYgZTB*60M--hKD$JQ)2k+?Vg%tDRKDRokgwTskjJs*Wf zZlCI1y3V#Xjpwo0Q?FCs=GB@mjp<DEImSMxRonWB$|1vszcZ}cN`ivEEc>xVu19L= zKI;_<FDF>a9Xo2k6L?XcY459*vFS}8<9ay_ntrL6UU-~iwzsI`*xRqN9G6{$Cr*2Q zo!gvaWsLoPF<y<dNlOb_if?S*Z0x*q^}FZ4WY*og%@Cp>v?TAowy<kqK<eLfRia8s z0+LPK$`$g@mR~OpUg^^iaw;m7!#|;8y+-i`ahIkq{N1XHLKwAH--+{A=qav!oXqmI zFmck3wA73QOX=f#Ds1$h>7ElP%uY&Qv!MTjN{(OBx7mX3F+mGrCfXHy>2yBY!+P^+ z%wPV$iHmq6*PedVwAw)C`y;MB5?Ni{pS-7NzJ9)cLx^Xps7#|p>gLFlUmUVhS1;da zdAU#J*xbzyC#D(SJ}{Fd`N=N{{XBQ)JI%{i&oEW{<>AG@%rmJi(3XMU<Cfrrloi{q zz2P$O2{w_?U$wyMRKZ)t8+T%J+awpPoL5(t!)xnmwr<VQ2p^+)`_6A+|JJlhm|LQK zIqQeXVhhBLI$54_-q5%h7Z=jc{aELHx>11q1@1+f#gTJ*?k#`L5&U_vgzOqK-UW6G z#P=+DmByUfsm64LeT@k7%KK4yGs>zgN-O#qqh||QoNrj`nDZ;~!Huw*gL?!ezA|dF zUNN`%q#b)jxw>WXN@m7i%vaJ+&8@zB```EHew(bHJvBT$_s#4jtJb=&TYdG_(SLdW zCcCY;>Tx=9>FULQr>M8jwhDS6=uo>%=Et*3cQ*#B``4`6vM=fBYq{J{(Vg$tExTgB z$+|u0|Ks)b{~BeAUtT(&|G(_}(dBo1WpzFX1jNht{VUk|Fem+l@w)R>e8*+p&N@GL zZ`IpZD;7Gh*q&zJt?#?Ae#5;@6ZD?{xO~-mv(ode_5bf4<!+C2nUH@z-u}nm-UXg| zm-pQDxx>Di{mS*3>u!HH+W+I_eATDj;;v!(pSi2jLT>-ue1FTSu;V`!Z8iU0_P2BN z-EikcjQy$lE00Xy_m!2N=>G8XUD*2D_4_hz_o*5NPW9hqWp!iLHsvtB73+<i+iobl zdbe#`*sF_eY%||9hRXf?X!P;+4fTw>=e6YGCK&K+{r&V*?~du}mJ7Fq-0Ls7%)RRB z_neh(43ihN{_^s?c<PFhCwu3n9gCLCxf1Z%qVQVEf->h#_vZxc+kW9-*xj{Zw{Kk# z>Mtn1eScNdpXr6>^}DT)^u;+|Y55$m`_{Gp0rAuBv96rC(lzRv*t0XA%Qi?SowDPx zE7=~h_*Y7Dn3JH;_TM{ZIGd&I6WyM)Jbvrd>6<>tJ>K*}e_rBE-Kp;SfB!DsctyK7 z?fk0st2=9F>V^uOw>!PKtaz#Y|37=C-~P8vJ2Agwg)XD%d3ARY`xEO^&dz^ldFkdA zTZxnx$t%;oPAzJ(PUov_6%{ftZ-`Z%dVjyusa=(q?q)vec=-F)x_w5S=iapM-o+I+ zr|!v{R_^d!^X5PF->a0XwOGzlc&D7);|cT6pITocYf(Bk>d4`{Cyy-Tclxq1Wbv<v z28)vF)U`e$2h~)nr9B;)7JF}J=MCBP?%AUm(<V-yH&5i);<x>=lQtw)io8nr%{Je^ z_t(wP=%xE(y8WZ?|G297>TXZ7__byG_h+8fI`N5}p;qVWoY#-<1Tan%crv+5fp5)) zH+P-5_wW=aJm@KteE-t2?9h{2`Tt#0ZU6oIXCJ%2`fuB*^XL1kzRxb6K6g$#XRDLf z-&^_my<g_Ndi(aRY1WLDi{<9LNL=am^{MsrqozflW|wo`O!<8-_0b8Puvnq<yUI)6 z8~@|HeR=tQ{X0=+nU7kg3miFi%x#axww&A7c9*~Z_v`g~XW6+&yOY{@7M7>`pUj{8 zbJd!4?;cc`TP&~?c#*u)?Q7~<BO8US%U!rm&6PeFJ-^;(=8@)<`Aw#G?2MI@vjZ<0 zoY}hM&EiR$iln8zzAEn97n~z7J34mzXS);U&;D-s6=cC%%vt%@bkSzxF8;;;92WF1 zmAd-;(~cwGR=KH~GpMIlYexs3d&8*Dm!eqFFSl%0k)ir~X1?~vFJHcV@#FaO)upAS zbM5Qn)F!*?{n`C}hM^nZC94a^gL+>*=H9e9MLU?ecB)F#M%H4lptBqFdNOBNTyy>M z<^}WB>cx+z$ygLPEDX5wvhh^eit=_|>9qUI-A5PgleilC|L?KS$!dL#f%OU(jtA-1 zT}tA<{zhn>p-V$^fBl|Uf|Its|Kob}%F1BPqndZ$zIhW96SHEwm9_QCCI7#@y`7tz zyL9Q&OOw_4)Mk3?PIT;eH|<a-Pme@Wvhd$iJ6<R6Fit=B=jHPG98EjQ-b$JN3C_2) zu&}VSOq6ijd$siSvi}|NZ8r`i`WiD`Nk1~T`mU(EUav&;m+P~)AM2HN@BDW}*gxP> zaDL$9zh`Hg>&NW4aOFzLrzf6|?EiDl=5l90!x1oF@N7`(h1H6xx3x{qoqTRv{PS48 za%{VlqLzcSL#>;K-k)zpKf1N1p1Qkt|LK4glJg$>|Ng~(a?MJe#Yfq`@UJ-Ev7ht9 z*;Gr{O6m3ge@Q1LcQ5+p*Vo7Q&6e~0+}q~)rGc6Ji{8oE<-EuU|8h2gKlnJe4a=4E zmiFDj-}Z3w&kI^vfBkKB`TLbCGp(bg-Pxn7qb)3N`Y?Xw<y76ZS9wRCWW%q9sYw!F z*RFUceq@<=Tklzg1E5yq0=otFVzKFbSJ=0tPPjUg`72|tWJ>8XhuQ`9Y=v_z1LS`M zvy~(0v(uO6^K*Jkx2t(4xAF54wjECnX>FKeRs1VrRbXw|6~~)Qla{D^o_w`HMP<rO z-C2y?hn!xWd6~R2jFZ1>k!|iZvqi?<ECreCN)t6ppOtJ4`5iNVN{H#gLrD^!*Yb9+ zGG5-iG-|cK$-A5*F1ruZWFJX-b>?N#%5ATNdv~k6v0T02-m=gnkj_mZ-e0GF4PE=j z@}*dXb;SXO2#>jzcXh7%)jnOgckLWj=>-cKrY1?2J}cQ0qW$%$Y3SQKma`AmWFJ*} zb>?N(%CJ|P7q9YjeJL+&z+v#;s(4ovm%0%{l;Mw8XBvMsgz@aNDqdi>K(u-NIhhsw z8Al(iHfDdtj4sXJyZ|H}q1hIAzv@*Tq?)Wqde#dKSl@OhPur@E54NocYcX9_|NGqC zFPqM<|9@+$n5@mA(umy8E2mu2znb-R*^TQ?%lsFr+1Y=ZJA3u!1fw~NZD(wB`)a@H z=dYse(&=5_cje9(SNXT~Y07bXp~)JLXGebveD%EM(uc46^J8|EWX}CDHGH{k@~ec# z#zRq8{(pM$(tp2|q~xDH_W6sXpZ$41?ftsAy~kud=a<U~f4lVh^b6~Cb%7hERN1J9 zcc!&^-}axsyW;27OpoH%{MN7jeN9`iKH$Ta&fg3YBC7-br-@6>|NQb<eV*uX*ZFI` zW()s#b6x#>?bqDsr@K#j_;>yPb2;uxi+cCJPCHi}o~TXVPF~E*-YkCq^*gck|5LmR zGyhDwajjq7!rIBS>tJ)}ihS?uYysQ1ZoPTqg8KcS5A#2sxqo%Rj+)#*5mDc_Z59`F zxod6w?9GZFu3PQYQf3IRT6VhQBDYf3*12mf!_G5*ant@fb<(4&FQ4`XF{KuYi-+iL z+p>wrS@z9pqs90Czc>(3eY^VZlq0sGN8EPguD9G}7v^&3&8Ce@uQQuER>l_wEP59` zVb;xy2jA^}#ymgu*aE&VL!St}T~Vu!9={nUvvbX~?F;v~9&mf|w&;vPq15b?!Z$SY z+l!vB`B!lLp=kYV&%K|nTW<b-rGBHC)syI#{UxFs^GaXO>}EV~8(Q|@#hVS0d%bG| zZhrW?Q{Mh;&rFkhFT!UrSuNbXRO+g_boc3#JD*Co+KS5UU^;F4<?UO;tS=tlbJ<lk z$A4Trk5At259`4#`h7L^-;T%6tDU!R!8_@foUbkxH+`QhC&y8=*m<GOYD+g=qr^KJ zm)-a>oaDVtSLsjQqMWlw>yG`RsScKmoR&8QV@}_>xp}i})9#(?{BCc^aCSShCi9AR zchdcz3bj*}Uw!bq5u&wL|6kVsPGkF{y0Lff{II{WyW6;Y`MTKoTQ$#~yL8TTiygSa zWpP|FOR972?mpH9Z*M0bHH@@t53Zc1X@BUely%*n<<_S^KW=vayKMin_wWDr{W<mZ z^>y#6RUM}F+NDKB_cTR<UIiQP=v!jOaL;aDvahV^0>N6Ht1Ilf7V+5$aypq^<<r;7 za|^tt7^!vMY4wJ}<Bym7&)3t?dFEGjD&H#BRVV0AS>?@b_q38;1RURfB>#Jup!Ki2 zt>28}uU)-bc)Z`F^h$#p*qt(Z?75~99cst2*Hl+M`>h(?J-2<Q$n>1W|89PnBKZ01 z*R2~J^X|Snb@sP{wR!)n%NI{tnyAc>^0~H0G~?9@#$Ir}YM9ufV644AZii#X)_nc^ zLrkZ1zh9YlQaB<!B)q7oXzLoKZ(%7<MDmOG9}~H7KIkmFxnbh9w8%rR1okggIVQSv zno4BWBL9chg?A23$lUsS_5Hri%Mq?`9KNRKcgD?mWP9#PAoHw?hl6tKmK|j2KFzOh z=1}v@!S7Ix|Ha*#xW!Gw1g)>vy{b9;ds(0O1);gRTX)54wDW9?6qYUe#dfV;)Ns@5 zup{1b&S$=gWiS-4@%wwb{9Rh8Ny59uo$>kK;$7Fw3vfOA$-H#W0f)rWSMoWQU%e)5 z*s;au@f`h6^Mhmd9h3UmBDjdDr~m58|4%n=u3LZR+On=0_ltvHt1dtK-}G+AM#f`D zUR{abs9=!k?HYNpJ$zlcQU`C>qH}(J-@bjj68&Z2yxHb2wURojjueRZ2j(3t=82rj zV4%Im?=R<Lx4LPPe;;U0{dND1()&Am-F<K0zG-E>i0@n2cE2^k+5cx~UOZU(n#Hd4 zfR|y<udtBs+)0<Y4<AbtNC5RZ0^|+Edt#XRudw?xpUi&H_^Tn)ppw@nK;A$uEfgf& z)3WpG0p_oa%87ZVA52#3YtNFLa<}k*r}K$x#;i`xe+v)HlDHsMQ5CW3?27(PN2>YN zFHYaSc*WDWIUF<QHLht~zIkbss*Q#RzeGpl>c-`(m)=_8f9kuM&w53{IqF^>k*X=# z_pKOgjx}68aQSA?*;kL7rm8aWvAaK+^yup8BTv@dG8K!N%xGZC9LVg?@4Z#S?T|3r z7oQE!^CF6Kj=j3|&D6$wwGrP8VTgRG^$ySaevi4+7#faCzL2Vjidq#|o0?r~ed_7O z*^`d_IaB4b;i}W?T&8D-7_J<+d_3sv*RN08HyMYY5}Dh<-L3AUdtal$MLyvOM7H<U zX4jir7v-$o&B_p!@ItEMR|KfGQad1%1qv!ogLbKk1$GHcXBM)_t>B-*P`sj%{S`C1 zbd^sKC?wa29A1%cTe@Gt?5{yVj*a1GH*gGihsM_}?XF7c|MA#(K7)huw1xjj>(d=b z+Q9Rbzoz)*yBjMftJ{S}#c%vn+HdxA?UC~E;8*fD=Q^+a|M9y0e}}%EB`=?EuiyRq zQSjftE=&yk2Jv6}arNoG9JSs&|LF8(YZj?()A_Pcu6|cldf1aa-`?-vUGeZjH^-;9 zKVP%&-!Eu#GIiGW*`2=`W*DZes=NNSdS?8eFXtzHI@+zYdiqaRTjN!4|J=-vN?rZ< z&xCm*|6i)VoNN`5SF%q2seRVRS>^7#t)964C@Eik{jGicmfYi$W~?}+9xE%$6Sk2< zB4x(PUtcO$LArDsmj{R&-DF;E^XYNwqwO30FYKBhD!`v6*LLe~(NniOrzg(|h~5<t zZoYRxRPA}OydOM&EJ5uVJ>ITWsmta6>m1_vdOmQs;>~<Njr-9r5>~$pTb-L*rB%9f z=iB^H-G8Td%-(-jHpxA{&Dqz2f9vYpzx-cQU&c<DH8W~SYJTE5n|$`&|4xT9H1oyk zTn(z-WNIIM?pslU)GWS={=&#F;^#NKnRaUN^nd?^V!M;hy@~u<YPwN>^HQ#+byt># zdDs8@S*gGMZ*KUZdjf&cOj+~%`!wn%#GjmHf46waX2E9GGmPLSROHWJ*Dja}9zUcl z$+FDaf0uQyjA2du?W^Hx7ia!02oFEleYt<m-hzi-*FPJ-I4!=!_Y3F!Ih`^5{e>sa zr#}tf#W!b{pYEfF?^3QfFcv$wdv6Vl-)FpZ+U$^{fpW=Wv(5#a+%>y9Im*qiswzmL zf17=o=b^Tzfh(HdO4rz#zDf_zo%*jx*DkmAad`WRa$~-@h}r-CEi+xMaC*C4$+nQq zzfR5Kz5OxuDwD{{M6ua%1#Y{0zJHOiPAq!6{r{p(a`pB9=dZiJx6b+L_28ASadp)= znOJ?g<fdf>&CfV<MtzZ;P|_8Z!!N!h{Sn@_+`m44$JU%nM>zErOP1<=Ty$eoZgjPF zDQ{_sn10vGwO2~L>Rz7-Pc1EFKfe1Qqp!BJzPIU0efw)#`D^(<o?f!-<hk41RU7}k zRXr=s(xY^h@mj&}Gd(?PU0n|wT%WY5-|N(=YOYe=k6-5|HQ%`NYS-NFj&*tW*sn}K zlsUuu#Ow8fbLR%uNPJz(vsdTp5<BySyCUyIAMIV?$+2$k#_H@N4tFoT>;E8U>r?tP z$?qO}RM@Mom>=cu4gZEDva=~yMXoZu?r!+!pJ0%PyI@OIo8;y{w~lPoTa@lDzv7;> z>~@#rrR!d;`d|0>r=jri11s`#UnH;O+y5+S(WlKywaLi`?Bl+2oV->3Z;?~-QoWZa zh1n<fOzUQR*70rHte2fU`_nsmeZOcwUf2KdTl~t^udn(37u?UYvGMS%hOmf+U*+#g z!)11wB)z#9pMUSw{vh#>^Z&Q_w$9$i5S7UI%G`UZ<NCHKIqNT2sL%g?=Bf1l-V)iY zmK6-%$C<87kNNTT=?C$xE3bT&slRpI-XqQT?S3(9h6@o5zv_h_%sySz^~o&m|5x)P z$HZLU&XtjseN!zo&w6|Qy;qC0OIPl0=a;s+C0c8I<M5S_Ow$@!SG<4tZi;RGq2}cw zukM%rzIV6!i)`!LoLm{%oVTWTqWKyAF>nX`H`KWJR`y_NgXXm5b_^0Mhgamgg389d z201xwjBd3DycoZpm0e+M?$Ge-8S9mq#!?IRRWg=7>tS1wU$x-e98ZR?zC2fE8jCL2 z*V$-Qyv%9yuT66cy}P4RxkMkm6E!feO`dds<LdP_>?@4Z1-@(u+5BsVf|+{5*<%4g zH>XHSZ@;yEWy`)#vIY_X>3x<}5vw9=dk#PT=C?4;!t2zNE8oPgm>UG7_bFCItO{M{ zf8_}4GLMdP=Wef=z$6&MmRhmkoJ?`a))4KlhKbh_85ic*Z`sTF_&|rffx}$Owij6| z%iJphcn%xtIP7_F<IK{ZcI}gQ@GNHeXCIK>r)d?n>hnS0oj!g_G0D>&Z4_E?ZVuzc zV?n*IPD__>OKcLi$eEI{_RJma=c*0gnVGK4Om487mL>PqGxKTJpQ*B1M~==_77%}~ z({T3=Bjc+xhK~H+rmN12<*g9OGw`TrU|Vo*&b}APnsZJhxH-(VOlEpDTQDH~+>C}_ zX)IS}8mleXCkYBh&K3D+($BcB%#;prs0FtZt_6eI3H;2*j|m&+vw)(*aNaLjF4eCu zjy7pmGj2{;aAkk(^Sr8?&#%|N_3Gx6duX+0+s_cMm(#PhRt3MwR=m7CKzP3V&vR$5 zMjG6lVg8V{p`B;SFZruAwL5S38Xv8`yX`!;(EnRSn;y$|dQSOxR`<8Y*J8WOAHVLK z>&5Qc;`is&>dW&a7f3KHkmp(XZ@RmG{jaMhPds@3w^I17!Snj<HRWGlnZEP*wdeDU z4b$V|x3$gsu_!_FYlYuBp|f1mx6QXJ|M+S3<q6NO$(LRE`}(Xy{K5yB%*U7+{w5fF z%`cny(Q<y?zvp3vF<)-3+G5#wzOMGuo$&kHLif$?`Lg84dHc7nz7?BZ%zqJl<j?}u z?D;Zpx0zLc-1{!?<1hbhBGZrQcjo@BXxgkC!^tec+`N+Po|SG)4wnRH?<?U+Z#8F5 z^?fU=a_SM6@Fuf!PyamJU~}c*J}u*4fBX4(wr<~h-PiL@uxn1s?QgRdzfN{Na#l|| z`d5CS@RaYO?5eN!v96pcEBj_&w%v!wG@e%s?9q(27p`5pzc{jXX_xHQg<c1aa(LFA z*|dXyXM5P+lS|)CR^JeOkMHTZ$iENQ9oGJ5Ho5BQ`r@?rEB`0umYmprN&cl)(%o0r zjK!JfRj+z;;Ns21%~jKXE!gz%cd>olEJ@=`o0v?l7wvr0>>NI`b}d@6<ep~C41uF_ z1MmAO+_7I<^oW8U*4p2k4E+mdFWviMQi8x*A<Nm9^SjHoITx5;znUp6mV2UOrfF|g zYTz4d`6cU%Tx9QY&h}dR^=SNC`@(0-cPw2!Tl#-{Re9mFcUQK)-fXt?=0VHO2FDAB zF2!vLkB^+cX`!jYUcbv_Ew4?>{#5vvPkVlxz5kbQ{n`8X|I7ZI`uh6%>0d$wv;T#? zdh%pXu*Q-r%hL*EJ#!iM)Y=@+l4WD~(!6b&Qq*dHk4r~ickYmlW;Ustz2ou6%gg=6 zMZ}8LZJ(OYU8f|bS+{#nPISJgVabZe(T}!QukMij`_Ae2O#RodUhR17o+S=4h;N$G zt(E>;(mJPaYn%3_>%yMfJqmHjcP|^?*S{I{#^%h@9VyaZ&o5ivGh_Yw^}W1BufxLg z?y=w8S$SnnpWnHKiU(O7*Hmf;bQ>@%kT2ORa?z=FQ*CvO&tCs?dWPbPo<gpsTdgaZ zUU$9n^7C6aE%eB}uAVuMc(2c3^0{y`$c6js?Q${s;FW!QzaCn5?|GeO@72J+QxATa zYmt|DV#}?+SM!e_$y}pUw&2(1?JoL$ALW+E@-sf*zX;Y^DcyhC?3IKEmQIwF89zh+ z!v3YqpI*P5plFu8$l34yfnV#D+{*5DRh&%bxFf@8z{<Sn-&^bQ&010h-!C3nZ~l9| zQkegWMQK0zU3eHS*fTHscW_$pdKS)Z@6#sdek%R9Jo+?y%|w457YT+7{LG8~O+S9_ z*IuLO*;+|;=Y7{spCk7F`j<uyW`<vh4y1LXDxcajWSneRVV`*C#CfB|@-|C@{?Cqm zGI#g)6`9r6(dq724$ArYvHA2EiY#$qzs^|9+`|HH$79r0Yq?i6erE`%H()mX@Qd+^ z{22${J#`FU*`))R{k<LjI<j6la9J*(K7i5m!xs0=zfK)nBl@#F>bCWXhCjj4&g}m) z5>7_s^4i$yT)pEd^0@0!nvTV`#FcX@TMjfN&o%u3uD~SpOZ1vfJk?-&70nSA0qPIw z=3i#ZV99!r$-KheqEV_sit#JEdH}P(@`8U4K*BEGUp*()E%?9OH&*+=lZaGao4Yz! zo&Nqx^*<`R$Jbx=$1jx)N2;TPDtVGw*rZmkZd|^5Y19gR9gEw62^}vO7AM7;ekj>4 zQuNo6`^tgW@&WZ1m`p$XV!tB4#esLvKgO@@x&h4V>m5*~kFT=M4|U+(bG)IH5i~?s zf2vEL=h8U`gI0C3QjU7ABWX?vkiO@JAW(I)(c)|8tnG0tIy1BdXZ=2TdDEf`5~05m zjjc~lof4|odv=mW;Kggn(yYt+p4lz?>7(mc+rYU*#Xep#u-fbL+bL@q1MaU<nCdm@ zEZh6co<()lsXksCm&AH5%5jYO_3S89Ph@pU^wmp${<ukYva96kbv!V-?RV*F_odY; zMNCI`a&OWO=aev6o)fcQr!?QXvGBReM$eW+d%;De)u&!PayDX0WmkEU(p}jjrSfWe z>$?26DyhcH($C(gC~#(&{PmlM|Ln4)NS<Kpps?LZWnsS7C(Vweui|wJluzvpT5a~Z zz$I>XQr)4dxL`ivy#h;Cx&>`mooTFhUs8Ib$?5isUel)@*U5e)dSx2RgN{wHZbqHm zD?B~3o}|d$6K&Wk?tbpQ!gHfc-oR@rM?-ey{8{7Mq5V4ei1+1MzI5Zr!WkPDl%4$} z+52eOStqx~uU}2}r%q?c)$gCFpME2l%QN)#v;J8{1(6s3bbPH&e-~%)pq#;=>(?BH z!1pZHCSEi4@AB;9kPt2TE~wslV+!*eR!-yYuxs0vf7<cOOm+48N$hLx$TnQ|dKk0! z_CiHfQ=zgDXNJEE3y*d)cZC~g_DY3otKQk6rg%4an}On@jJjNHC4=tR;7L+77J<CB z(fN5UQzj((XI4CFnK!S<b>W-2L6Tn+4fr?L_bl4C$If`~f@PsMi?13qo>P_BcKq1y zYux7!c9y9&FPp-p`tGpVnQK!61UXjgn~0=8=2)ED5wuJtdb88==lARVCg~ewoo^6e zY20D|MzhcGwI*-dchzDIFR7*T-2&#X@bsVbBlKGC)1bN8{_`ad?{M8YY17{Hcwf!% zB#Fr%8Pgx0;<M~5;7PE5)~7gkipX9~yS40#-B!Nm)AF!N>1!`E<Z%x9((bUnD(m{p zggxQOOg#(iJbAxZ%=TR`v#7ATmi>^)MVBQ{e||m0>!fx4{CZdBu9+#CG7n|Gy?Jvc z;N7a<JMG$6e>Y<g?O<7X`}--EK$(!p{hQ-jJ0x7%9vtGh*Z%Y6*E=Cv!U|J2g-IR~ zmUyInO6CjeM1{YHlR7m*8%}9$zb?%2IOhHj3CG%)87k`{C8Z+H9W&IIJKtT|ZR~Pq z)(uJR7s@uAvnS8^n|4HSx`;;jlJj$fycb#IJC<37|97sRk>MQndee>vT0F=1?qJey zoAqeXAEDG!zkcfLga$>jx-0nI%n_Su=hW`@)x<1umwspAa~*+APtTYYs2!BpX?Lvq z_C<m34_<1e^>*4#y40LG>EJo-Bg~V^SX3letu@`v#B*7M_gJ^qiaw*5Y7VpV@Y#uM z8LO7hmtCCi*D|43JKIofa?kSj#%~+<E_ii>>Da?e#y?9~U$putIaV^6d2N|4e)aJo zi_^bn@?2s6(v)#3MofM2_m`H3uKdy9-t${y1^)|H{gu0JIz%q&WcbRc{j~7w_xJbn zCs{BYIAOEsU-o+T*;;%I21XM;FobbIrcx4?HvDRUEV!Aus=g-oK~&D^=bd&|`ZoiO zvhU42B3#L~FWBkuB+aFN&VP5ws$OpT^j&Ks?`OXp?u~mc?^@Gp9~{3iIWFPY$@_aB z*yWd>wz5}tNm&@6{pRaqZhw(`<+6|6*C!j=mI_OF{F3}CTQk{yJ;(m~a3+yFsa3)& zrq|D4^gGYS)>kJi_oeW0XWP@nOpl_{I03)qVxON~{iyv-<=29il5)4G%;pf!q&UZq zl9CVYt|Xm38C)zY^jFlnOg?-;oZ`vWlWW?ZJh_y{dXlSZy}|n9JdYkMdMUc5Lf_T9 z-OF=9ouOoAVt@bC`WrtM7jJp%;dk%S8mGv8iTnLMryTdbWELv(UP0iFdPU{2YQ=t2 z-?EV9s`;4{ghK2M=eI^{CB0zrzPLfta`CR-U&T8ATVG#F`q3Z9>Q;Wb`24;ZavP^! z<!0tTmwoe?R_rF%s@Z2a_|7=TFd2W_`~2tbmi8%O%a;b$yLBeS{kxc%Ik7I{d{|PL zvAvvqq<ZKoE5m=E_VfsN@6TVGx-fcOKkL#|lXhMIb>B4SY^ko)6!Nd`*WlOd*E=fY z9j!6jdewCI<I6X`GWwHw`kYK2hxXm#L+v>peExAeCfMue`g<!*J#jvIQnkSbgC);p z-rrV_7U{eyTGNx2?s;QU%=y~)KmVS)V4uH-|5JrqjizLLq0*i99PQ42yXG&?e#%-u znjYeR>c(ZEBTBc+jvUv&`RMD5bIcbvWCpt@xSp0<#lOU9)q?yDZ63wqs`B6U*DPiV zlJSY#p(1!YTyWh*&;3UZ{dgR5DERvH4>o(^X4vf0tecz^_wu1_UB>Zus@#t!N0zoa zmRz^)mskHD5>P)k=eCKq)pkV<eGap=#}><f&7XhABs=TfUv&-pwS8rxkM~cPw$ZM- zsN>VB{;qpTyWP`=U611~wpY7nuitQ_(pv1AtoxtL{}GKJC)#~kE+cZrKhI66`j~Z# z{ITOg{$&b^btR|y<{g~)XP!QzoRH*<i81Q6=g+@)6!>d$@A$`8Y$iLlq(?XWa&==5 z)p@^jRb<rO-OckO1dqI`wYA%jlsnht;`52J=^}x1EtNwner^ny)*t>ps8p-2DCxY% zc`nbsbsTH*0$Q^7mj7m#S-(!XnLD|v>YeC3iEYXE-lZvNw7j#l-&4-r_KWrB!fb!7 z2?{4B_PE#Y{I}%CrAr(3@yi~47vJujDe^9K;zEw<_y4N9_^!U)ru(pQ>G$U<o-OtN zXH`vS7k|HiZw2?WOXe#sMjmM1-@G~Im)hOPcc+Y3-Dm%p-fJ%-$2oOU%1=9v$xmPQ z%~`lSge&y<$1M*I^t5}kmDyc#)KOU*Fm=0X<-I7;SC97_820|+S{1@_Ea~gkzTnAP ztd6zZ|7uJ#7pU9(XFt7pPr;KNtIYXCiYp6pCm&W`&0@gxSJg(N?eUNQ+T{yw%-z$< z!INg1b87DO$+I8ml#Bm6^eR`eDsHjc&D#C1xK>)MKNKss^X~j-#{$b`LbZO)a^N`n zcRk-%(<1(=_Zy$QFf6D`adTDKnwxohqQqXC>)TW3?zVPYA)<0=xBbEp4Uh8s?*C1; zGP{(0i>#V`AtZuz@uA>Sjo<rhxw0-Do%?HDc~%6UM8>bPUp=!{y!kz$y1c?O^W>)( zrCp0m*j7iI=vM|`m{(d8R<I-g<+Lr$ahZxCMb27FkDp&qQ~#F#jpnPO@^<mI>Ojt) z)7VTle3>}KrTDRiy~PUSwTmpR4$r?At6{rF>F1Z%c8L$ywC<cOwddaAV!5o7&pt;8 z{QrK~{Nl9&q0djNA6_ZHb9d?XX1m0L@3^-=k^5fTf9k9BCok(ii<;$RKiSsq4Y_(; zw1dC<-rjq)&-Pv3a^7~kQoT+3!*<q*-k-`^@;kpQEc$yVYihlbsK$!?qF-mf8Z*`Y zzQlS&(crs_T(-B--h652{?0_nle~#1B^|Fy{!6S}>fz>Aldx%$i{UhJdz+c-59@nP zk-qfg!O9@jSE66;O>^1rzTbGqv15V%pXhQ=zI-U|{-eI#KA*mRx4HMb^lO*SS?5bd z;(qb>HZSR~_bIxdJd=B6mY%O)^g4wV+xPz9Hh%PXg?Q~F?#mrpo;=X}A}CiE5%=!# z?;RBpMM<AOwKiVWd-u-nU`@Qs#m`31<b`*tSKgbV%OMtaW7E0Mi4}jgTspF4%Zmds zi=K1%XU^I;+x@_TKQn)=IboZw^#A|q&fk7EGmbfPMLSig8_wU*)3u?;{rT7P79TGJ z{@XR}yu8iF>h~WW-aq?7bdR24&0XcwpRUW+8T^(v`^PaOKIP%Q_KRwE6?5fhZhy{S zb@6)Rf>Ke(*K+luU%4W~1wZ{b?by1!=~vnZPW?YNe-2vLzD>Sj_w^xry%gtq3(<cC zjXkyx`%4?54)TXTRsPG`(>!zD2?hpcUQorS7ADVqvrOyA7Da|It{!L&h*2eSt*yIV j9u(Zp$Z+i0e}>K8i*_b?dATq!Ffe$!`njxgN@xNAf{pf} literal 0 HcmV?d00001 diff --git a/source_codes/recursivity/lissage.c b/source_codes/recursivity/lissage.c new file mode 100644 index 0000000..f501ca0 --- /dev/null +++ b/source_codes/recursivity/lissage.c @@ -0,0 +1,66 @@ +#include <stdio.h> +#include <stdlib.h> + +const int SIZE = 64; + +// Moyenne des pixels de l'image <im> +double moyenne(int n,int im[n][n]) { + double size = n*n; + double moy = 0.0; + for (int i=0;i<n;i++) { + for (int j=0;j<n;j++) { + moy += im[i][j]/size; + } + } + return moy; +} + +// Nombre de pixels de l'image <im> dont la différence +// à la valeur <val> est supérieure à une tolérance <tol> +int nb_pixels_diff(int n,int im[n][n],double val,double tol) { + // à compléter + return 0; +} + +// Affectation de la valeur <val> à tous les pixels de l’image <im> +void copy(int n,int im[n][n],int val) { + // à compléter +} + +void copy_slice(int decal_x,int decal_y,int n,int im1[n][n],int k,int im2[k][k]) { + // à compléter +} + +void copy_back(int decal_x,int decal_y,int n,int im1[n][n],int k,int im2[k][k]) { + // à compléter +} + +//Lissage récursif de l'image <im> en remplaçant les pixels +// d'un quadrant par leur moyenne +void lissage(int n,int im[n][n],double tol,double seuil) { + double moy = moyenne(n,im); + double size = n*n; + if (nb_pixels_diff(n,im,moy,tol)/size < seuil) { + copy(n,im,moy); + } else { // si on ne peut pas lisser l'image, alors on essaie sur les quadrants + int quadrant[n/2][n/2]; + copy_slice(0,0,n,im,n/2,quadrant); + lissage(n/2,quadrant,tol,seuil); + copy_back(0,0,n,im,n/2,quadrant); + copy_slice(n/2,0,n,im,n/2,quadrant); + lissage(n,quadrant,tol,seuil); + copy_back(n/2,0,n,im,n/2,quadrant); + copy_slice(0,n/2,n,im,n/2,quadrant); + lissage(n/2,quadrant,tol,seuil); + copy_back(0,n/2,n,im,n/2,quadrant); + copy_slice(n/2,n/2,n,im,n/2,quadrant); + lissage(n,quadrant,tol,seuil); + copy_back(n/2,n/2,n,im,n/2,quadrant); + } +} + +void main() { + int image_gris[SIZE][SIZE]; + copy(SIZE,image_gris,234); + lissage(SIZE,image_gris,0.1,10.0); +} diff --git a/source_codes/recursivity/rec_binary.c b/source_codes/recursivity/rec_binary.c new file mode 100644 index 0000000..2eb856b --- /dev/null +++ b/source_codes/recursivity/rec_binary.c @@ -0,0 +1,23 @@ +#include <stdio.h> +#include <stdlib.h> + +// Ecriture binaire +void binaire(int n); + +int main() { + int n; + printf("n="); + scanf("%d",&n); + binaire(n); + printf("\n"); +} + +// Ecriture binaire +void binaire(int n) { + //printf("%d",n%2); + if (n/2 != 0) { + binaire(n/2); + } + printf("%d",n%2); +} + diff --git a/source_codes/recursivity/rec_factorielle.c b/source_codes/recursivity/rec_factorielle.c new file mode 100644 index 0000000..e5513d1 --- /dev/null +++ b/source_codes/recursivity/rec_factorielle.c @@ -0,0 +1,19 @@ +#include <stdio.h> +#include <stdlib.h> + +int fact(int n); + +void main() { + int n; + printf("n="); + scanf("%d",&n); + printf("%d\n",fact(n)); +} + +int fact(int n) { + if (1 == n) { + return 1; + } else { + return n*fact(n-1); + } +} diff --git a/source_codes/recursivity/rec_fibonacci.c b/source_codes/recursivity/rec_fibonacci.c new file mode 100644 index 0000000..0c8a487 --- /dev/null +++ b/source_codes/recursivity/rec_fibonacci.c @@ -0,0 +1,22 @@ +#include <stdio.h> +#include <stdlib.h> + +// Suite de Fibonacci: a_n = a_{n-1} + a_{n-2}, a_0 = 0, a_1 = 1 +int fib(int n); + +int main() { + int n; + printf("n="); + scanf("%d",&n); + printf("%d\n",fib(n)); +} + +// Suite de Fibonacci: a_n = a_{n-1} + a_{n-2}, a_0 = 0, a_1 = 1 +int fib(int n) { + switch(n) { + case 0: return 0; + case 1: return 1; + default: return fib(n-1)+fib(n-2); + } +} + diff --git a/source_codes/recursivity/rec_pgcd.c b/source_codes/recursivity/rec_pgcd.c new file mode 100644 index 0000000..4c6b6a4 --- /dev/null +++ b/source_codes/recursivity/rec_pgcd.c @@ -0,0 +1,23 @@ +#include <stdio.h> +#include <stdlib.h> + +int pgcd(int n,int m); + +void main() { + int n,m; + printf("n="); + scanf("%d",&n); + printf("m="); + scanf("%d",&m); + printf("%d\n",pgcd(n,m)); +} + +int pgcd(int n,int m) { + if (n%m > 0) { + return pgcd(m,n%m); + } else { + return m; + } +} + + diff --git a/source_codes/recursivity/rec_ppcm.c b/source_codes/recursivity/rec_ppcm.c new file mode 100644 index 0000000..ef505ee --- /dev/null +++ b/source_codes/recursivity/rec_ppcm.c @@ -0,0 +1,24 @@ +#include <stdio.h> +#include <stdlib.h> + +int ppcm(int mult_n,int mult_m,int n,int m); + +void main() { + int n,m; + printf("n="); + scanf("%d",&n); + printf("m="); + scanf("%d",&m); + printf("%d\n",ppcm(n,m,n,m)); +} + +int ppcm(int mult_n,int mult_m,int n,int m) { + if (mult_n < mult_m) { + return ppcm(n+mult_n,mult_m,n,m); + } else if (mult_n > mult_m) { + return ppcm(mult_n,m+mult_m,n,m); + } else { + return mult_n; + } +} + diff --git a/source_codes/recursivity/rec_puissance_indienne.c b/source_codes/recursivity/rec_puissance_indienne.c new file mode 100644 index 0000000..ceff6ba --- /dev/null +++ b/source_codes/recursivity/rec_puissance_indienne.c @@ -0,0 +1,26 @@ +#include <stdio.h> +#include <stdlib.h> + +// Puissance indienne +int puissance(int a,int b); + +int main() { + int n,m; + printf("n="); + scanf("%d",&n); + printf("m="); + scanf("%d",&m); + printf("%d\n",puissance(n,m)); +} + +// Puissance indienne +int puissance(int a,int b) { + if (0 == b) { + return 1; + } else if (0 == b%2) { + return puissance(a,b/2)*puissance(a,b/2); + } else { + return puissance(a,b-1)*a; + } +} + diff --git a/source_codes/recursivity/rec_reines.c b/source_codes/recursivity/rec_reines.c new file mode 100644 index 0000000..5f54088 --- /dev/null +++ b/source_codes/recursivity/rec_reines.c @@ -0,0 +1,75 @@ +// Problème des N-reines +#include <stdio.h> +#include <stdlib.h> +#include <stdbool.h> + +bool** board_alloc(int n) { + bool** tab = malloc(n*sizeof(bool*)); + for (int i=0;i<n;i++) { + tab[i] = malloc(n*sizeof(bool)); + for (int j=0;j<n;j++) { + tab[i][j] = true; + } + } + return tab; +} + +void board_free(int n,bool** tab) { + for (int i=0;i<n;i++) { + free(tab[i]); + } + free(tab); +} + +bool** clone(int n,bool** board) { + bool** tab = board_alloc(n); + for (int i=0;i<n;i++) { + for (int j=0;j<n;j++) { + tab[i][j] = board[i][j]; + } + } + return tab; +} + +// Retourne une copie du tableau <board> complété avec les positions +// prises sur la droite droite par une reine placée en <board(li,co)> +bool** prises_devant(int n,bool** board,int li,int co) { + bool** cases_prises = clone(n,board); + cases_prises[li][co] = false; // position de la reine + for (int j=1;j<n-co;j++) { + // horizontale et diagonales à droite de la reine + if (j <= li) { + cases_prises[li-j][co+j] = false; + } + cases_prises[li][co+j] = false; + if (li+j < n) { + cases_prises[li+j][co+j] = false; + } + } + return cases_prises; +} + +// Calcule le nombre de solutions au problème des <N> reines +void nb_sol(int n,bool** board,int co, int* ptr_cpt) { + for (int li=0;li<n;li++) { + if (board[li][co]) { + if (co < n-1) { + bool** tab = prises_devant(n,board,li,co); + nb_sol(n,tab,co+1,ptr_cpt); + board_free(n,tab); + } else { + *ptr_cpt = (*ptr_cpt)+1; + } + } + } +} + +void main() { + int n = 8; + // échiquier où placer les reines + bool** board = board_alloc(n); + // compteur du nombre de solutions au problème des <N> reines + int cpt = 0; + nb_sol(n,board,0,&cpt); + printf("Nombre de solutions: %d\n",cpt); +} diff --git a/source_codes/recursivity/rec_reines_skel.c b/source_codes/recursivity/rec_reines_skel.c new file mode 100644 index 0000000..7b2b056 --- /dev/null +++ b/source_codes/recursivity/rec_reines_skel.c @@ -0,0 +1,54 @@ +// Problème des N-reines +#include <stdio.h> +#include <stdlib.h> +#include <stdbool.h> + +// Alloue un tableau de dimension nxn de booléens dont le contenu est true +bool** board_alloc(int n) { + // à compléter!!!! + return NULL; +} + +// Désalloue un tableau de dimension nxn de booléens +void board_free(int n,bool** tab) { + // à compléter!!!! +} + +// Retourne un clone de <board> +bool** clone(int n,bool** board) { + // à compléter!!!! + return NULL; +} + +// Retourne une copie du tableau <board> complété avec les positions +// prises sur la droite droite par une reine placée en <board(li,co)> +bool** prises_devant(int n,bool** board,int li,int co) { + bool** cases_prises = clone(n,board); + // à compléter!!!! + return cases_prises; +} + +// Calcule le nombre de solutions au problème des <N> reines +void nb_sol(int n,bool** board,int co, int* ptr_cpt) { + for (int li=0;li<n;li++) { + if (board[li][co]) { + if (co < n-1) { + bool** tab = prises_devant(n,board,li,co); + nb_sol(n,tab,co+1,ptr_cpt); + board_free(n,tab); + } else { + *ptr_cpt = (*ptr_cpt)+1; + } + } + } +} + +void main() { + int n = 8; + // échiquier où placer les reines + bool** board = board_alloc(n); + // compteur du nombre de solutions au problème des <N> reines + int cpt = 0; + nb_sol(n,board,0,&cpt); + printf("Nombre de solutions: %d\n",cpt); +} -- GitLab