数独网格生成器

时间:2017-02-22 13:16:45

标签: c grid sudoku

我刚刚开始制作我的数独游戏,我已经创建了这个函数grid来创建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();
}

2 个答案:

答案 0 :(得分:0)

他们发布的代码中的语法错误太多,而且格式非常糟糕。尝试编辑它,以便我们为您提供帮助!

  

col--;   也许这是你的问题,因为如果你col--;循环for (col = 0; col < 6; col++),你将进行6次以上的迭代。

答案 1 :(得分:0)

我知道这个问题很老,但这里的评论者确实说至少要等 1 小时...

直接回答您的问题:

  1. 您会得到垃圾值,因为您没有在 !cell 时为 (s % 2 == 0) 设置值。
  2. 您每行得到 6 个以上的条目,因为您的 c-- 语句导致 col 循环执行 6 次以上(并且每次都执行 printf)。

如果您想保持逻辑的一般结构,请分两遍执行此操作 - 完全填充 cell,然后打印整个内容。但是,还有其他问题。您可能想要完全删除 s % 2 == 0 检查,第一个 continue 可以是 break(如果您真的想让人们生气,则可以是 goto)。