给出一个最简单的生成数独初盘的程序,不保证有唯一解,终盘的正确性通过填充的过程来确定,可以用舞蹈链算法求解该数独得到其中一个解
随机生成的方法就算交换行和列然后随机挖洞
这里有一点要注意的就是交换的行和列必须处于同一宫中,要不然交换之后保证不了正确性
然后就是随机挖洞,可以直接随机一个坐标,或者用洗牌算法(类似于扫雷初盘的生成)
vector<vector<int> > generate(const int & level) {
vector<vector<int> > mtx =
{ {9 ,8 ,7 ,6 ,5 ,4 ,3 ,2 ,1},
{4 ,5, 6 ,2 ,3 ,1 ,7 ,8 ,9},
{3 ,2 ,1 ,7 ,8 ,9 ,4 ,5 ,6},
{1 ,3 ,5 ,8 ,6 ,7 ,2 ,9 ,4},
{8 ,4 ,2 ,3 ,9 ,5 ,6 ,1 ,7},
{6 ,7 ,9 ,1 ,4 ,2 ,5 ,3 ,8},
{2 ,6 ,3 ,9 ,7 ,8 ,1 ,4 ,5},
{7 ,9 ,4 ,5 ,1 ,3 ,8 ,6 ,2},
{5 ,1 ,8 ,4 ,2 ,6 ,9 ,7 ,3} };
int remain = -1;
switch (level)
{
case 0:
remain = 30;
break;
case 1:
remain = 25;
break;
case 2:
remain = 21;
break;
case 3:
remain = 18;
break;
default:
break;
}
for (int i = 0; i < 25; ++i) {
int t = rand() % 9;
int tx = t / 3 * 3;
int ty = t % 3 * 3;
int r1 = t

本文介绍了一个简单的C++程序,用于生成数独初盘,但不保证生成的数独有唯一解。通过行和列的随机交换以及随机挖洞的方式来生成,交换限制在同一宫内以确保正确性。可以结合舞蹈链算法解决生成的数独问题。
最低0.47元/天 解锁文章
4298

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



