방금 스도쿠 게임을 만들기 시작했고이 기능을 6x6
스도쿠 그리드 용으로 만들었습니다. 나는 각 셀의 다른 숫자에 대해 rand()
함수를 사용했다. (현재는 숫자의 반복 행만 검사한다.) rand()
은 각 격자에서 빈 셀의 난수에도 사용됩니다.스도쿠 격자 생성기
문제는 그리드가 완벽한 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 들여 쓰기 스타일이 Pico에서는 좋지만 C는 Pico가 아닙니다. 정통 C [들여 쓰기 스타일] (https://en.wikipedia.org/wiki/Indent_style)을 사용하십시오. Allman을 선호하지만 많은 사람들이 1TBS의 변형을 선호합니다. 그것들 중 하나 또는 다른 것을 고수하면 잘못되지 않을 것입니다. –
6x6 스도쿠 보드에는 일반적으로 2 행 3 열의 하위 셀이 6 개 있으며 각 행과 각 열뿐만 아니라 각 하위 셀의 6 자리 수의 고유성을 보존해야합니다. 코드가 이러한 기준에 부합하지 않을 것입니다. 9x9 보드에는 각 서브 셀과 각 행과 열의 고유 번호가있는 3x3 크기의 서브 셀이 9 개 있습니다. 6 개 항목의 배열을 무작위로 바꾸는 것이 더 나을지 궁금합니다. (나는 스도쿠 생성기를 코딩하지 않았으므로 가장 좋은 방법은 모른다.하지만 태그 된 스도쿠에 관한 700 개의 질문이있다. –