From b7d25f74e9f95f09ce9b6a68544fb5ea116d1c52 Mon Sep 17 00:00:00 2001 From: Arian Karami Date: Sun, 26 Mar 2023 22:39:29 +0200 Subject: [PATCH] tests pass --- ex00/Makefile | 2 +- ex00/backtrack.c | 98 +++++++++++----------------------------- ex00/backtrack.c.new | 28 ------------ ex00/backtrack.old.c | 71 +++++++++++++++++++++++++++++ ex00/config.mk | 2 +- ex00/include/backtrack.h | 4 +- ex00/main.c | 9 ++-- 7 files changed, 107 insertions(+), 107 deletions(-) delete mode 100644 ex00/backtrack.c.new create mode 100644 ex00/backtrack.old.c diff --git a/ex00/Makefile b/ex00/Makefile index 4195a6c..67672ba 100644 --- a/ex00/Makefile +++ b/ex00/Makefile @@ -4,7 +4,7 @@ include config.mk NAME?=rush-01 -SRC=gen_util.c handle_input.c handle_mem.c main.c backtrack.c +SRC=gen_util.c handle_input.c handle_mem.c main.c backtrack.c is_valid_state.c get_cur_pos.c HEADERS=gen_util.h handle_input.h handle_mem.h backtrack.h _OBJ=$(SRC:.c=.o) diff --git a/ex00/backtrack.c b/ex00/backtrack.c index 1ca82e7..b07cebc 100644 --- a/ex00/backtrack.c +++ b/ex00/backtrack.c @@ -1,71 +1,27 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* backtrack.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: akarami +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2023/03/26 19:50:55 by akarami #+# #+# */ -/* Updated: 2023/03/26 21:00:13 by akarami ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include -#include -#include "include/backtrack.h" - -int is_solved(int **board, int n) -{ - int i; - int j; - - i = 0; - while (i < n) - { - j = 0; - while (j < n) - { - if (!board[i][j]) - return (0); - j++; - } - i++; - } - return (1); -} - -int *next_cell_pos(int **board, int n) -{ - int i; - int *pos; - - pos = malloc(2 * 4); - i = 0; - while (board[i / n][i % n]) - i++; - pos[0] = i / n; - pos[1] = i % n; - return (pos); -} - -// void *get_candidates(int **board, int n, int next_cell) -// { -// return (0); -// } - -int backtrack(int **board, int n, int *borders) -{ - int *next_cell; - // void *candidates; - - borders++; - if (is_solved(board, n)) - return (1); - next_cell = next_cell_pos(board, n); - printf("x:%d\n", next_cell[0]); - printf("y:%d\n", next_cell[1]); - free(next_cell); - // candidates = get_candidates(board, n, next_cell); - // printf("%d\n", candidates[0]); - return (0); -} +#include + +int is_valid_state(int **board, int *borders, int *pos, int n); +void get_cur_pos(int **board, int *pos, int n); +void print_board(int **board, int n); + +int backtrack(int **board, int *borders, int rec_depth, int n) +{ + int pos[2]; + get_cur_pos(board, pos, n); + int y = pos[0]; + int x = pos[1]; + if (rec_depth == n * n) + { + return (1); + } + int counter = 0; + while (++counter < n + 1) + { + board[y][x] = counter; + if (is_valid_state(board, borders, pos, n) == 1) + if (backtrack(board, borders, rec_depth + 1, n) == 1) + return (1); + board[y][x] = 0; + } + return (0); +} diff --git a/ex00/backtrack.c.new b/ex00/backtrack.c.new deleted file mode 100644 index 221e6fc..0000000 --- a/ex00/backtrack.c.new +++ /dev/null @@ -1,28 +0,0 @@ -#include - -int is_valid_state(int **board, int *borders, int *pos, int n); -void get_cur_pos(int **board, int *pos, int n); -void print_board(int **board, int n); - -int backtrack(int **board, int *borders, int rec_depth, int n) -{ - int pos[2]; - get_cur_pos(board, pos, n); - int y = pos[0]; - int x = pos[1]; - if (rec_depth == n * n) - { - return (1); - } - int counter = 0; - while (++counter < n + 1) - { - board[y][x] = counter; - print_board(board, n); - if (is_valid_state(board, borders, pos, n) == 1) - if (backtrack(board, borders, rec_depth + 1, n) == 1) - return (1); - board[y][x] = 0; - } - return (0); -} diff --git a/ex00/backtrack.old.c b/ex00/backtrack.old.c new file mode 100644 index 0000000..6f88b33 --- /dev/null +++ b/ex00/backtrack.old.c @@ -0,0 +1,71 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* backtrack.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: akarami +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/03/26 19:50:55 by akarami #+# #+# */ +/* Updated: 2023/03/26 22:32:20 by akarami ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include "include/backtrack.h" + +int is_solved(int **board, int n) +{ + int i; + int j; + + i = 0; + while (i < n) + { + j = 0; + while (j < n) + { + if (!board[i][j]) + return (0); + j++; + } + i++; + } + return (1); +} + +int *next_cell_pos(int **board, int n) +{ + int i; + int *pos; + + pos = malloc(2 * 4); + i = 0; + while (board[i / n][i % n]) + i++; + pos[0] = i / n; + pos[1] = i % n; + return (pos); +} + +// void *get_candidates(int **board, int n, int next_cell) +// { +// return (0); +// } + +int backtrack_old(int **board, int n, int *borders) +{ + int *next_cell; + // void *candidates; + + borders++; + if (is_solved(board, n)) + return (1); + next_cell = next_cell_pos(board, n); + printf("x:%d\n", next_cell[0]); + printf("y:%d\n", next_cell[1]); + free(next_cell); + // candidates = get_candidates(board, n, next_cell); + // printf("%d\n", candidates[0]); + return (0); +} diff --git a/ex00/config.mk b/ex00/config.mk index 9ab2a41..7a29903 100644 --- a/ex00/config.mk +++ b/ex00/config.mk @@ -17,7 +17,7 @@ INCS=-I$(INCDIR) CFLAGS= CFLAGS+=-Wall CFLAGS+=-Wextra -CFLAGS+=-Werror +#CFLAGS+=-Werror CFLAGS+=$(INCS) LDFLAGS= diff --git a/ex00/include/backtrack.h b/ex00/include/backtrack.h index 60a30b2..35465e9 100644 --- a/ex00/include/backtrack.h +++ b/ex00/include/backtrack.h @@ -6,13 +6,13 @@ /* By: akarami +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/03/26 18:48:28 by akarami #+# #+# */ -/* Updated: 2023/03/26 20:59:52 by akarami ### ########.fr */ +/* Updated: 2023/03/26 22:32:27 by akarami ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef BACKTRACK_H # define BACKTRACK_H -int backtrack(int **board, int n, int *borders); +int backtrack_old(int **board, int n, int *borders); #endif diff --git a/ex00/main.c b/ex00/main.c index 15a3b4c..ed58a4a 100644 --- a/ex00/main.c +++ b/ex00/main.c @@ -6,7 +6,7 @@ /* By: tischmid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/03/26 06:13:07 by tischmid #+# #+# */ -/* Updated: 2023/03/26 21:31:20 by akarami ### ########.fr */ +/* Updated: 2023/03/26 22:34:46 by akarami ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,6 +18,7 @@ #include "include/gen_util.h" void print_board(int **board, int n); +int backtrack(int **board, int *borders, int rec_depth, int n); /* void init_board(int **board) @@ -51,12 +52,12 @@ int main(int argc, char **argv) n = 4; borders = malloc(n * 4 * 4); board = alloc_mem(n); - print_board(board, n); if (!handle_input(argc, argv, borders, n)) return (put_error(1)); - if (!backtrack(board, n, borders)) + if (!backtrack(board, borders, 0, n)) return (put_error(2)); + else + print_board(board, n); free_mem(borders, board, n); return (0); } -// TODO: get position