问题:
构造一个9*9的方格矩阵,玩家要在每个方格中,分别填上1至9的任意一个数字,
让整个棋盘每一列、每一行以及每一个3*3的小矩阵中的数字都不重复。
首先我们通过一个深度优先搜索来生成一个可行解,然后随机删除一定数量的数字,
以生成一个数独。
#include <iostream>
#include <cstdlib>
using namespace std;
#define LEN 9
#define CLEAR(a) memset((a), 0, sizeof(a))
int level[] = {30, 37, 45};
int grid[LEN+1][LEN+1];
int value[LEN+1];
void next(int &x, int &y)
{
x++;
if (x>9)
{
x = 1;
y++;
}
}
// 选择下一个有效状态
int pickNextValidValue(int x, int y, int cur)
{
CLEAR(value);
int i, j;
for (i=1; i<y; i++)
value[grid[i][x]] = 1;
for (j=1; j<x; j++)
value[grid[y][j]] = 1;
int u = (x-1)/3*3 + 1;
int v = (y-1)/3*3 + 1;
for (i=v; i<v+3;

本文探讨如何构造一个9x9的数独棋盘,确保每一行、每一列及每个3x3小宫格内的数字均不重复。首先利用深度优先搜索算法生成一个可行解,随后随机移除部分数字,以此创建具有挑战性的数独谜题。
最低0.47元/天 解锁文章
1258

被折叠的 条评论
为什么被折叠?



