// Sudo.cpp : 利用回溯思想生成数独终盘, 再随机抠去若干数字形成游戏(未证明游戏有唯一解)
#include <IOSTREAM>
#include <CTIME>
using namespace std;
int sudo[9][9], hole[9][9];
bool set(int x, int y, int val)
{
if (sudo[y][x] != 0) //非空
return false;
int x0, y0;
for (x0=0; x0<9; x0++)
{
if (sudo[y][x0] == val) //行冲突
return false;
}
for (y0=0; y0<9; y0++)
{
if (sudo[y0][x] == val) //列冲突
return false;
}
for (y0=y/3*3; y0<y/3*3+3; y0++)
{
for (x0=x/3*3; x0<x/3*3+3; x0++)
{
if (sudo[y0][x0] == val) //格冲突
return false;
}
}
sudo[y][x] = val;
return true;
}
void reset(int x, int y)
{
sudo[y][x] = 0;
}
void initXOrd(int* xOrd) //0~9随机序列
{
int i, k, tmp;
for (i=0; i<9; i++)
{
xOrd[i] = i;
}
for (i=0; i<9; i++)
{
k = rand() % 9;
tmp = xOrd[k];
xOrd[k] = xOrd[i];
xOrd[i] = tmp;
数独生成C++实现
最新推荐文章于 2024-06-29 20:05:05 发布
本文展示了使用C++编程实现数独生成器的详细步骤,通过回溯算法生成完整数独终盘,然后随机挖去部分数字形成具有挑战性的数独游戏。代码中包括初始化、设置、回溯、随机挖洞和打印数独等功能。
摘要由CSDN通过智能技术生成