用深搜加回溯来实现求解数独的所有解

思路:

1.对于当前的数独状态,我们可以把每个未填的位置的候选数字全部找出来,可以将候选数字放到一个数组或在vector中

vector <int> find(int x, int y); //找出soudu[x][y]的候选数字

2.如果有一些未填位置的候选数字为一个,那么这个就是确定项,我们可以先确定填补这个位置,如果所有的未填位置的候选数字都不唯一,那么选择候选数字最少的那么位置,遍历所有的可能性

3.怎么判断已解出答案,以及无法继续进行下去,要回溯前一步的状态呢,
搜先,设计一个 更新函数,每填补一个位置,就更新所有的未填位置的候补数字, void update(); 其次,设计几个全局变量, 一个用来判断,当前状态是否有更新,如果没有更新,认定为所有的位置已经填满,已解出答案,则输出结果, bool can_update; 还有用bool can_continue来判断是否存在某个未填位置没有候选数字可填,这种情况, 无法继续填数字 ; 另外, 在设计一个pair

#include<iostream>
#include<vector>
#include<utility>
using namespace std;

//初始化数独
int soudu[9][9] = { 0,0,0,0,6,0,7,0,0,
                    0,8,0,0,0,0,0,2,0,
                    0,0,0,9,0,7,0,0,1,
                    0,0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值