Skip to content
Snippets Groups Projects
Commit 91ee4aaa authored by paul.albuquer's avatar paul.albuquer
Browse files

refactored prises_devant by extracting copy, corrected typos such as stack => s

parent bbcb35d2
No related branches found
No related tags found
No related merge requests found
...@@ -177,8 +177,10 @@ bool board[n][n]; ...@@ -177,8 +177,10 @@ bool board[n][n];
// Pour chaque ligne placer la reine sur toutes les colonnes // Pour chaque ligne placer la reine sur toutes les colonnes
// et compter les solutions // et compter les solutions
void nbr_solutions(board, column, counter); 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 // 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) # Le code du problème des 8 reines (2/N)
...@@ -191,9 +193,9 @@ nbr_solutions(board, column, counter) ...@@ -191,9 +193,9 @@ nbr_solutions(board, column, counter)
// pour chaque ligne // pour chaque ligne
// si la case libre // si la case libre
// si column < n - 1 // si column < n - 1
// créer un nouveau board, poser une reine // copier dans un nouveau board, y poser une reine
// et mettre à jour le tableau // et mettre à jour ce nouveau board
// nbr_solutions(board, column, counter) // nbr_solutions(nouveau_board, column+1, counter)
// sinon // sinon
// on a posé la n-ème et on a gagné // on a posé la n-ème et on a gagné
// counter += 1 // counter += 1
...@@ -204,9 +206,8 @@ nbr_solutions(board, column, counter) ...@@ -204,9 +206,8 @@ nbr_solutions(board, column, counter)
## Le calcul du nombre de solutions ## Le calcul du nombre de solutions
```C ```C
// Copier board, placer une reine et mettre à jour // Placer une reine et mettre à jour
placer_devant(old_board, board, ligne, colonne) placer_devant(board, ligne, colonne)
// board = copy(old_board);
// board est occupé à ligne/colonne // board est occupé à ligne/colonne
// toutes les cases des colonnes // toutes les cases des colonnes
// suivantes sont mises à jour // suivantes sont mises à jour
...@@ -228,12 +229,12 @@ void nb_sol(int n, bool board_in[n][n], int co, int *ptr_cpt) { ...@@ -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++) { for (int li = 0; li < n; li++) {
if (board_in[li][co]) { if (board_in[li][co]) {
if (co < n - 1) { if (co < n - 1) {
bool board[n][n]; // allocation bool board[n][n]; // alloué à chaque nouvelle tentative
// à chaque nouvelle tentative copy(n, board_in, board);
prises_devant(n, board_in, board, li, co); prises_devant(n, board, li, co);
nb_sol(n, board, co + 1, ptr_cpt); nb_sol(n, board, co+1, ptr_cpt);
} else { } 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) { ...@@ -250,10 +251,7 @@ void nb_sol(int n, bool board_in[n][n], int co, int *ptr_cpt) {
```C ```C
// Retourne une copie du tableau <board> complété avec les positions // 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)> // prises sur la droite droite par une reine placée en <board(li,co)>
void prises_devant( void prises_devant(int n, bool board[n][n], int li, int co) {
int n, bool board_in[n][n], bool board[n][n], int li, int co)
{
copy(n, board_in, board);
board[li][co] = false; // position de la reine board[li][co] = false; // position de la reine
for (int j = 1; j < n - co; j++) { for (int j = 1; j < n - co; j++) {
// horizontale et diagonales à droite de la reine // horizontale et diagonales à droite de la reine
...@@ -339,7 +337,7 @@ Et oui vous avez deviné: un tableau! ...@@ -339,7 +337,7 @@ Et oui vous avez deviné: un tableau!
```C ```C
#define MAX_CAPACITY 500 #define MAX_CAPACITY 500
typedef struct stack_ { typedef struct _stack {
int data[MAX_CAPACITY]; // les données int data[MAX_CAPACITY]; // les données
int top; // indice du sommet int top; // indice du sommet
} stack; } stack;
...@@ -373,8 +371,8 @@ bool stack_is_empty(stack s) { ...@@ -373,8 +371,8 @@ bool stack_is_empty(stack s) {
```C ```C
void stack_push(stack *s, int val) { void stack_push(stack *s, int val) {
stack->top += 1; s->top += 1;
stack->data[stack->top] = val; s->data[s->top] = val;
} }
``` ```
...@@ -386,8 +384,8 @@ void stack_push(stack *s, int val) { ...@@ -386,8 +384,8 @@ void stack_push(stack *s, int val) {
```C ```C
int stack_pop(stack *s) { int stack_pop(stack *s) {
stack->top -= 1; s->top -= 1;
return stack->data[stack->top+1]; return s->data[s->top+1];
} }
``` ```
...@@ -397,7 +395,7 @@ int stack_pop(stack *s) { ...@@ -397,7 +395,7 @@ int stack_pop(stack *s) {
```C ```C
int stack_peek(stack *s) { int stack_peek(stack *s) {
return stack->data[stack->top]; return s->data[s->top];
} }
``` ```
...@@ -451,18 +449,18 @@ void assert(int expression); ...@@ -451,18 +449,18 @@ void assert(int expression);
```C ```C
#include <assert.h> #include <assert.h>
void stack_push(stack *s, int val) { void stack_push(stack *s, int val) {
assert(s->top < MAX_CAPACITY - 1); assert(s->top < MAX_CAPACITY-1);
stack->top += 1; s->top += 1;
stack->data[stack->top] = val; s->data[s->top] = val;
} }
int stack_pop(stack *s) { int stack_pop(stack *s) {
assert(s->top >= 0); assert(s->top >= 0);
stack->top -= 1; s->top -= 1;
return stack->data[stack->top+1]; return s->data[s->top+1];
} }
int stack_peek(stack *s) { int stack_peek(stack *s) {
assert(s->top >= 0); assert(s->top >= 0);
return stack->data[stack->top]; return s->data[s->top];
} }
``` ```
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment