-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpuzzle_generator.c
38 lines (31 loc) · 981 Bytes
/
puzzle_generator.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "sudoku_board.h"
#include "backtracking_core_logic.h"
#include <stdlib.h>
#include "2d_array_utils.h"
int generate_puzzle(Board* board, int fixed_cells) {
int i ;
int j;
int selected_row;
int selected_column;
int size = board->num_of_columns * board->num_of_rows;
int **fixed_board = create_2d_array(size);
back_track(board,0);
while(fixed_cells != 0 ) {
selected_column = rand() % size;
selected_row = rand() % size;
if (fixed_board[selected_row][selected_column] == BOARD_NULL_VALUE) {
--fixed_cells;
fixed_board[selected_row][selected_column] = 1;
}
}
for (i = 0; i < size; ++i) {
for (j = 0; j < size; ++j) {
if (fixed_board[i][j] == BOARD_NULL_VALUE) {
erase_value(i,j,board);
}
}
}
copy_board_values(board->fixed_board, board->cur_board, size);
free_2d_array(fixed_board, size);
return 1;
}