From f5f7714d9bb67996677d6e19ce29e25944937864 Mon Sep 17 00:00:00 2001 From: ivan-egorov42 Date: Tue, 14 Nov 2023 22:49:09 +0300 Subject: [PATCH] added nqueens test --- e2e_test/CMakeLists.txt | 1 + e2e_test/nqueens-test.c | 64 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 e2e_test/nqueens-test.c diff --git a/e2e_test/CMakeLists.txt b/e2e_test/CMakeLists.txt index 6924020..2a02b89 100644 --- a/e2e_test/CMakeLists.txt +++ b/e2e_test/CMakeLists.txt @@ -45,5 +45,6 @@ if (DEFINED BESM666__E2E_TESTS_BUILD) besm666_e2etest_asm(./mult-test.s) besm666_e2etest_c(./bubblesort-test.c) besm666_e2etest_c(./primenumber-test.c) + besm666_e2etest_c(./nqueens-test.c) besm666_e2etest_asm(./privillege-change.s) endif() diff --git a/e2e_test/nqueens-test.c b/e2e_test/nqueens-test.c new file mode 100644 index 0000000..8ea9973 --- /dev/null +++ b/e2e_test/nqueens-test.c @@ -0,0 +1,64 @@ +const int SIZE = 12; // Размер. + +// Я хз почему нельзя создать board[SIZE][SIZE], +// это ебучее говно ругается на variable переменную. +// Короче нужно менять чиселку в обоих местах. + +int board[12][12]; +int results_count = 0; // Количество решений. + +// Функция tryQueen() - проверяет нет ли уже установленных ферзей, +// по вертикали, диагоналям. +int tryQueen(int a, int b) +{ + for(int i = 0; i < a; ++i) + { + if(board[i][b]) + { + return 0; + } + } + + for(int i = 1; i <= a && b-i >= 0; ++i) + { + if(board[a-i][b-i]) + { + return 0; + } + } + + for(int i = 1; i <= a && b+i < SIZE; i++) + { + if(board[a-i][b+i]) + { + return 0; + } + } + + return 1; +} + +// Функция setQueen() - пробует найти результаты решений. +void setQueen(int a) // a - номер очередной строки в которую нужно поставить очередного ферзя. +{ + for(int i = 0; i < SIZE; ++i) + { + // Здесь проверяем, что если поставим в board[a][i] ферзя (единицу), + // то он будет единственным в этой строке, столбце и диагоналях. + if(tryQueen(a, i)) + { + board[a][i] = 1; + setQueen(a+1); + board[a][i] = 0; + } + } + + return; // Опционально. +} + +int start() +{ + setQueen(0); + + return 1; +} \ No newline at end of file