2013-04-18 5 views
0

Итак, я пытался написать функцию, для которой будут генерироваться числа для головоломки судоку. Вот как это выглядит.Один номер появляется только один раз?

Я как бы потерялся в последней строке ... Как я могу проверить, отображается ли только один номер в одной строке и в одном столбце?

void generator (int row, int col){ 

    for (int i=0; i<9; i++){ 
     int randNum= (1+rand()%9); 
     for (int j=0; j<i; j++){ 
      A[i][j]=randNum; 
      //check if one number only appears once. 
     } 

    } 
} 

ответ

0

Я бы добавил каждое случайное число к вектору. Затем после того, как каждое число сгенерировано, перебираем все элементы вектора, чтобы проверить значение, которое уже существует.

2

Вы делаете это совершенно неправильно.

Вы должны просто заполнить судоку в соответствии с правилами, начиная с 1.

После того, как у вас есть действительная судоку, произвольно переключите числа, используя случайную перестановку.

Обратите внимание, что это довольно сложная проблема (если вы включаете в себя настоящее судоку, а не только заполненную доску), и вы, скорее всего, недооцениваете его.

+0

спасибо. Но как бы я сделал случайную часть перестановки? – sis007

+0

@ sis007 Многие варианты. Вы можете использовать 'random_shuffle' http://www.cplusplus.com/reference/algorithm/random_shuffle/ –

Смежные вопросы