Я только начал делать свою игру в Судоку, и я сделал эту функцию grid
для создания сетки Судоку 6x6
. Я использовал функцию rand()
для разных чисел в каждой ячейке (в настоящее время она будет проверять строки только для повторения чисел). rand()
также используется для случайных чисел пустых ячеек в каждой сетке.Sudoku Grid Generator
Проблема в том, что иногда сетка совершенна 6x6
и без какого-либо числа, повторяющегося (только в строках), однако иногда в некоторых ячейках генерируются значения мусора, а иногда увеличивается количество столбцов. Я не понимаю, что вызывает проблему?
Кодекс:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void grid(void) {
int cell[6][6], row, col, s, i, j;
char in = 'A';
srand(time(NULL));
for (row = 0; row <= 5; row++) {
printf("\t\t\t[ |");
for (col = 0; col <= 5; col++) {
s = rand() % 6 + 1;
if (s % 2 == 0)
{
cell[row][col] = rand() % 6 + 1;
for (j = 0; j<col; j++) {
if (cell[row][j] == cell[row][col]) {
col--;
continue;
}
}
}
else { printf(" | ", in++); continue; }
printf(" %d | ", cell[row][col]);
}
printf("]\n\n");
}
}
int main()
{
grid();
}
Стиль отступов Пико, который вы используете, может отличаться от Pico, но C не является Pico. Пожалуйста, используйте ортодоксальный C [стиль отступов] (https://en.wikipedia.org/wiki/Indent_style). Я предпочитаю Allman, но многие предпочитают вариант 1TBS. Придерживайтесь того или другого из них, и вы не ошибетесь. –
На доске судоку 6x6 у вас обычно есть 6 подкатегорий из 2 строк и 3 столбца, и вам нужно сохранить уникальность 6 чисел в каждой подэлементе, а также в каждой строке и каждом столбце. Похоже, что ваш код недостаточно для соответствия этим критериям. На плате 9x9 у вас будет 9 субэлементов, каждый размером 3х3, с номерами, уникальными в каждой подъячейке, а также в каждой строке и столбце. Интересно, улучшилось бы вы со случайным перераспределением массива из 6 элементов? (Я не кодировал генератор Судоку, я не знаю, как это сделать, но есть почти 700 вопросов по тегам с тегами [tag: sudoku]!) –