From aa34d515b7debdd8edf63fbdb58f2fa936ab9572 Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 7 Aug 2019 20:33:02 +0200 Subject: ten queens updated for current subject --- c05/ex08/ft_queens.c | 62 -------------------------------------- c05/ex08/ft_ten_queens_puzzle.c | 67 +++++++++++++++++++++++++++++++++++++++++ c05/main.c | 4 +-- 3 files changed, 69 insertions(+), 64 deletions(-) delete mode 100644 c05/ex08/ft_queens.c create mode 100644 c05/ex08/ft_ten_queens_puzzle.c (limited to 'c05') diff --git a/c05/ex08/ft_queens.c b/c05/ex08/ft_queens.c deleted file mode 100644 index ba2c742..0000000 --- a/c05/ex08/ft_queens.c +++ /dev/null @@ -1,62 +0,0 @@ -#include -#define TRUE 1 -#define FALSE 0 -#define BOARD_SIZE 10 -#define ABS(x) (x < 0 ? -(x) : x) - -void ft_putchar(char c) -{ - write(1, &c, 1); -} - -static void print_cols(int cols[BOARD_SIZE]) -{ - int i; - - i = 0; - while (i < BOARD_SIZE) - ft_putchar(cols[i++] + '0'); // maybe +1 - ft_putchar('\n'); -} - -static int valid_position(int cols[BOARD_SIZE], int x, int y) -{ - int i; - - i = 0; - while (i < x) - { - if (y == cols[i]) - return (FALSE); - if (ABS(x - i) == ABS(y - cols[i])) - return (FALSE); - i++; - } - return (TRUE); -} - -static void solve(int cols[BOARD_SIZE], int x) -{ - int i; - - if (x == BOARD_SIZE) - { - print_cols(cols); - return ; - } - i = -1; - while (++i < BOARD_SIZE) - { - if (!valid_position(cols, x, i)) - continue ; - cols[x] = i; - solve(cols, x + 1); - } -} - -void ft_queens(void) // may have bad name -{ - int cols[BOARD_SIZE]; - - solve(cols, 0); -} diff --git a/c05/ex08/ft_ten_queens_puzzle.c b/c05/ex08/ft_ten_queens_puzzle.c new file mode 100644 index 0000000..36d5402 --- /dev/null +++ b/c05/ex08/ft_ten_queens_puzzle.c @@ -0,0 +1,67 @@ +#include + +#define TRUE 1 +#define FALSE 0 +#define BOARD_SIZE 10 +#define ABS(x) (x < 0 ? -(x) : x) + +void ft_putchar(char c) +{ + write(1, &c, 1); +} + +static void print_cols(int cols[BOARD_SIZE]) +{ + int i; + + i = 0; + while (i < BOARD_SIZE) + ft_putchar(cols[i++] + '0'); + ft_putchar('\n'); +} + +static int valid_position(int cols[BOARD_SIZE], int x, int y) +{ + int i; + + i = 0; + while (i < x) + { + if (y == cols[i]) + return (FALSE); + if (ABS(x - i) == ABS(y - cols[i])) + return (FALSE); + i++; + } + return (TRUE); +} + +static void solve(int cols[BOARD_SIZE], int x, int *solution_counter) +{ + int i; + + if (x == BOARD_SIZE) + { + print_cols(cols); + (*solution_counter)++; + return ; + } + i = -1; + while (++i < BOARD_SIZE) + { + if (!valid_position(cols, x, i)) + continue ; + cols[x] = i; + solve(cols, x + 1, solution_counter); + } +} + +int ft_ten_queens_puzzle(void) +{ + int solution_counter; + int cols[BOARD_SIZE]; + + solution_counter = 0; + solve(cols, 0, &solution_counter); + return (solution_counter); +} diff --git a/c05/main.c b/c05/main.c index f66caf9..628c5c3 100644 --- a/c05/main.c +++ b/c05/main.c @@ -9,7 +9,7 @@ #include "ex05/ft_sqrt.c" #include "ex06/ft_is_prime.c" #include "ex07/ft_find_next_prime.c" -#include "ex08/ft_queens.c" +#include "ex08/ft_ten_queens_puzzle.c" int main() { @@ -96,5 +96,5 @@ int main() /*printf("%d is %d\n", i, ft_find_next_prime(i));*/ printf("---------------------\n"); - // ft_queens(); + printf("%d solutions\n", ft_ten_queens_puzzle()); } -- cgit