c/c++ 求解数独

本文讲述了作者为了解决数独问题,利用C/C++编程实现了一个程序。程序通过遍历并逐个试探填入数字,再进行有效性及可解性判断。主要包含判断数独有效性、填数位置合法性以及求解数独的函数。通过调用相关函数,最终成功解决数独谜题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      大学时,对数独比较有一点兴趣,后来参加了一次学校组织的数独比赛,可惜结果不佳。最后本程序猿不服,突发奇想,准备自己写一个程序,解决数独问题。

       思路也很简单,遍历,每碰到一个空位,则从1到9逐个试探,填完之后先判定所填数字是否有效,然后判断新填完后的数独是否可解。

      先来一个函数,判断数独是否有效。代码如下

/*
检测一个数独是否有效,即在行,列,或小九宫格中出现重复数字,空位用-1代替
*/
//bool used[9] 用于记录数字是否出现过
//辅助函数,检测一个数字是否出现过
bool ChechNum(const int num, bool used[9]) {              //没出现过返回true,否则返回false
	if (num == -1) return true;
	if (used[num - 1]) return false;
	else {
		used[num - 1] = true;
		return true;
	}
}

bool IsSudoValid(vector<vector<int>>& board) {
	bool used[9];
	for (int i = 0; i < 9; ++i) {
		fill(used, used + 9, false);                 //初始化辅助数组
		for (int j = 0; j < 9; ++j) {                //检查行
			if (!ChechNum(board[i][j], used))
				return false;
		}
		fill(used, used + 9, false);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值