数独求解:用c++做一个数独求解的程序(附源代码和.exe文件)

这篇博客介绍了一个优化的数独求解程序,通过检查行、列和九宫格的唯一性来验证解决方案,并使用深度优先搜索进行回溯。代码首先读取9x9数独网格,然后按行和列的已知数多少来确定填充顺序,以提高效率。作者提供了两个版本的C++代码,第二个版本通过改进搜索顺序显著提高了运行速度。

        数独这个游戏大家都知道吧:玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3×3)内的数字均含1-9,不重复。

        为了更好的区分已填和未填的格子,未填的格子用0表示!!

1.输入

int a[11][11];
int alltheanswer;//所有的解
int wanttheanswer;//期望得到的解数
int main()
{
    printf("请输入9*9的数独:\n");
	for(int i=1; i<=9; i++)
		for(int j=1; j<=9; j++)
			scanf("%d",&a[i][j]);
	printf("请输入你期望得到的解数:\n");
	cin>>wanttheanswer;
}

2.检查每一行是否有重复

bool checkx(int x) {//x为第几行 
	for(int i=1; i<=9; i++) {
		if(a[x][i]==0)
			continue;
		for(int j=1; j<i; j++)
			if(a[x][i]==a[x][j])
				return false;
	}
	return true;
}

3.检查每一列是否有重复

bool checky(int y) { //y为第几列
	for(int i=1; i<=9; i++) {
		if(a[i][y]==0)
			continue;
		for(int j=1; j<i; j++)
			if(a[i][y]==a[j][y])
				return false;
	}
	return true;
}

4.检查每一个九宫格是否满足条件

bool jggfz(int x,int y) {//辅助判断 
	for(int i=x; i<x+3; i++) {
		for(int j=y; j<y+3; j++) {
			if(a[i][j]==0)
				continue;
			for(int ii=x; ii<i; ii++) {
				for(int jj=y; jj<y+3; jj++) {
					if(a[i][j]==a[ii][jj])
						return false;
				}
			}
		}
	}
	return true;
}
bool jgg() { //九宫格判断
	if(jggfz(1,1)==false)
		return false;
	if(jggfz(4,1)==false)
		return false;
	if(jggfz(7,1)==false)
		return false;
	if(jggfz(1,4)==false)
		return false;
	if(jggfz(4,4)==false)
		return false;
	if(jggfz(7,4)==false)
		return false;
	if(jggfz(1,7)==false)
		return false;
	if(jggfz(4,7)==false)
		retu
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值