diff --git a/slides/cours_8.md b/slides/cours_8.md index 4dc4c882715dffae34c10dc75799b8a398bde9f3..4c2d63ac656649ef14b5a198f59e97505f5fcea7 100644 --- a/slides/cours_8.md +++ b/slides/cours_8.md @@ -177,8 +177,10 @@ bool board[n][n]; // Pour chaque ligne placer la reine sur toutes les colonnes // et compter les solutions void nbr_solutions(board, column, counter); +// Copier un tableau dans un autre +void copy(board_in, board); // Placer la reine à li, co et rendre inaccessible devant -void placer_devant(board_ini, board, li, co); +void placer_devant(board, li, co); ``` # Le code du problème des 8 reines (2/N) @@ -191,9 +193,9 @@ nbr_solutions(board, column, counter) // pour chaque ligne // si la case libre // si column < n - 1 - // créer un nouveau board, poser une reine - // et mettre à jour le tableau - // nbr_solutions(board, column, counter) + // copier dans un nouveau board, y poser une reine + // et mettre à jour ce nouveau board + // nbr_solutions(nouveau_board, column+1, counter) // sinon // on a posé la n-ème et on a gagné // counter += 1 @@ -204,9 +206,8 @@ nbr_solutions(board, column, counter) ## Le calcul du nombre de solutions ```C -// Copier board, placer une reine et mettre à jour -placer_devant(old_board, board, ligne, colonne) - // board = copy(old_board); +// Placer une reine et mettre à jour +placer_devant(board, ligne, colonne) // board est occupé à ligne/colonne // toutes les cases des colonnes // suivantes sont mises à jour @@ -228,12 +229,12 @@ void nb_sol(int n, bool board_in[n][n], int co, int *ptr_cpt) { for (int li = 0; li < n; li++) { if (board_in[li][co]) { if (co < n - 1) { - bool board[n][n]; // allocation - // à chaque nouvelle tentative - prises_devant(n, board_in, board, li, co); - nb_sol(n, board, co + 1, ptr_cpt); + bool board[n][n]; // alloué à chaque nouvelle tentative + copy(n, board_in, board); + prises_devant(n, board, li, co); + nb_sol(n, board, co+1, ptr_cpt); } else { - *ptr_cpt = (*ptr_cpt) + 1; + *ptr_cpt = (*ptr_cpt)+1; } } } @@ -250,10 +251,7 @@ void nb_sol(int n, bool board_in[n][n], int co, int *ptr_cpt) { ```C // 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)> -void prises_devant( - int n, bool board_in[n][n], bool board[n][n], int li, int co) -{ - copy(n, board_in, board); +void prises_devant(int n, bool board[n][n], int li, int co) { board[li][co] = false; // position de la reine for (int j = 1; j < n - co; j++) { // horizontale et diagonales à droite de la reine @@ -339,7 +337,7 @@ Et oui vous avez deviné: un tableau! ```C #define MAX_CAPACITY 500 -typedef struct stack_ { +typedef struct _stack { int data[MAX_CAPACITY]; // les données int top; // indice du sommet } stack; @@ -373,8 +371,8 @@ bool stack_is_empty(stack s) { ```C void stack_push(stack *s, int val) { - stack->top += 1; - stack->data[stack->top] = val; + s->top += 1; + s->data[s->top] = val; } ``` @@ -386,8 +384,8 @@ void stack_push(stack *s, int val) { ```C int stack_pop(stack *s) { - stack->top -= 1; - return stack->data[stack->top+1]; + s->top -= 1; + return s->data[s->top+1]; } ``` @@ -397,7 +395,7 @@ int stack_pop(stack *s) { ```C int stack_peek(stack *s) { - return stack->data[stack->top]; + return s->data[s->top]; } ``` @@ -451,18 +449,18 @@ void assert(int expression); ```C #include <assert.h> void stack_push(stack *s, int val) { - assert(s->top < MAX_CAPACITY - 1); - stack->top += 1; - stack->data[stack->top] = val; + assert(s->top < MAX_CAPACITY-1); + s->top += 1; + s->data[s->top] = val; } int stack_pop(stack *s) { assert(s->top >= 0); - stack->top -= 1; - return stack->data[stack->top+1]; + s->top -= 1; + return s->data[s->top+1]; } int stack_peek(stack *s) { assert(s->top >= 0); - return stack->data[stack->top]; + return s->data[s->top]; } ```