思路:
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