数独生成C++实现

本文展示了使用C++编程实现数独生成器的详细步骤,通过回溯算法生成完整数独终盘,然后随机挖去部分数字形成具有挑战性的数独游戏。代码中包括初始化、设置、回溯、随机挖洞和打印数独等功能。
摘要由CSDN通过智能技术生成
// 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;
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值