Как правильно получить сетку судоку 9х9 ?
#include <bits/stdc++.h> #include <cstdlib> using namespace std; #define SIZE 9 int table[SIZE][SIZE]; void init_table(); void print_table(); void fill_table(int); void rand_mark(int,int); bool isValid () ; void init_table(){ for (int i=0; i<SIZE; i++){ for (int j=0; j<SIZE; j++){ table[i][j] = 0; } } } void print_table(){ for (int i=0; i<SIZE; i++){ for (int j=0; j<SIZE; j++){ if (table[i][j] != 0) cout << table[i][j] << "|"; else cout << ' ' << "|"; } cout << endl; } } void fill_table(int num){ int x_pos; int y_pos; int counter = 0; while (counter < num){ x_pos = (rand() % (SIZE)); y_pos = (rand() % (SIZE)); if(table[x_pos][y_pos] == 0 ) { rand_mark (x_pos, y_pos); counter++; } } } void rand_mark(int x_pos, int y_pos){ int r_num; bool exit = false; while (exit == false ){ exit = true; r_num = (rand() % (SIZE)); for (int i=0; i<SIZE; i++) if (table[x_pos][i] == r_num || table[i][y_pos] == r_num){ exit = false; break; } }; table[x_pos][y_pos] = r_num; } bool isValid(int i, int j, const int table[][9]) { // Check whether grid[i][j] is valid at the i's row for (int column = 0; column < 9; column++) if (column != j && table[i][column] == table[i][j]) return false; // Check whether grid[i][j] is valid at the j's column for (int row = 0; row < 9; row++) if (row != i && table[row][j] == table[i][j]) return false; // Check whether grid[i][j] is valid in the 3-by-3 box for (int row = (i / 3) * 3; row < (i / 3) * 3 + 3; row++) for (int col = (j / 3) * 3; col < (j / 3) * 3 + 3; col++) if (row != i && col != j && table[row][col] == table[i][j]) return false; return true; // The current value at grid[i][j] is valid } int main(){ srand(time(NULL)); int num; init_table(); cout << "Generate how many numbers (40 max)? "; cin >> num; while (true) { fill_table(num); print_table(); } }
Что я уже пробовал:
у меня есть функция, чтобы проверить, следует ли сетка правилу судоку, но не могу заставить ее работать