2017-02-22 42 views
0

Я только начал делать свою игру в Судоку, и я сделал эту функцию 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(); 
} 
+0

Стиль отступов Пико, который вы используете, может отличаться от Pico, но C не является Pico. Пожалуйста, используйте ортодоксальный C [стиль отступов] (https://en.wikipedia.org/wiki/Indent_style). Я предпочитаю Allman, но многие предпочитают вариант 1TBS. Придерживайтесь того или другого из них, и вы не ошибетесь. –

+0

На доске судоку 6x6 у вас обычно есть 6 подкатегорий из 2 строк и 3 столбца, и вам нужно сохранить уникальность 6 чисел в каждой подэлементе, а также в каждой строке и каждом столбце. Похоже, что ваш код недостаточно для соответствия этим критериям. На плате 9x9 у вас будет 9 субэлементов, каждый размером 3х3, с номерами, уникальными в каждой подъячейке, а также в каждой строке и столбце. Интересно, улучшилось бы вы со случайным перераспределением массива из 6 элементов? (Я не кодировал генератор Судоку, я не знаю, как это сделать, но есть почти 700 вопросов по тегам с тегами [tag: sudoku]!) –

ответ

0

Они слишком много синтаксических ошибок в коде, которые вы добавите, а формат довольно ужасно. Попробуйте отредактировать его, чтобы мы могли вам помочь!

col--; Возможно, это ваша проблема, потому что если вы в в своем цикле for (col = 0; col < 6; col++), вы сделаете более 6 итераций.

+0

Добро пожаловать в Stack Overflow. Я согласен с тем, что код в вопросе не читается, как написано. Тем не менее, вам, вероятно, будет лучше подождать, пока у вас хватит репутации (50 баллов) для комментариев, чем добавить комментарий в качестве «ответа». 'Col -' не является серьезной проблемой; это способ вернуться и попытаться создать число, когда выбранный номер уже используется. Код может быть неправильным в алгоритме, но 'col -' сам по себе не является проблемой автоматически. –

+0

Как получить репутацию 50 без ответа? (честный вопрос, а не сарказм) и сожалею о неправильном ответе:/ – Dot31

+0

Есть 3 основных пути получения репутации: (1) задание хороших вопросов; (2) дает хорошие ответы; (3) внесение изменений в вопросы или ответы, которые считаются положительными. Вы должны найти вопрос, на который вы знаете, или можете решить ответ - возможно, тот, который был пренебрежен в течение часа или более, так что вы не будете в конкуренции с FGITW (самая быстрая пушка на западе) толпой - и обеспечите хороший ответ на него. Как правило, это чистая репутация. –