1.问题描述:
2.问题分析:
这道题目是比较经典的搜索问题,当你学会怎么解八皇后问题的时候,就慢慢的进入了搜索之道,这一道题目比较难的点就是33的格子内填充的数不能重复。行和列不重复很简单,怎么判定重复与否,我们将数独棋盘分为9个33的棋盘并且将其编号:
可以发现规律每一个编号的33的格子为当前的x,y
x / 3 * 3 + y / 3
我们可以在主函数里通过设置判断行,列,33格子是否使用,visx[9][9]代表的是该行所用的数,比如visx[0][1]代表的是第0行已经存在数字1了,第0行则不能填充数字1了.visy[9][9]代表的是该列所用的数,比如visy[0][1]代表的是第0列已经存在数字1了,不能够放数字一了,vis3[9][9]代表的是33的格子中存放的数,比如vis3[0][1]代表在0编号中的33的格子已经放了1了则在其余8个格子不能够放1了。
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (map[i][j] != '*') {
visx[i][map[i][j] - '0'] = true; //因为是字符数组,所以转换为整数需要-'0'
visy[j][map[i][j] - '0'] = true;
vis3[i / 3 * 3 + j / 3][map[i][j] - '0'] = true;