基本思路:
利用dfs的思想,让程序自动检测未填入的格子,填入格子的顺序按照先行后列依次填入,不满足条件就回溯到上一格,重新检测可填入的数再进行填入。其中可填入的条件按照一般做数独的方法,若此格为空,则检测出此格所在行、列、块没有的数字依次尝试填入。
子函数的流程:
1、dfs搜索结束的条件
2、开始回溯的条件
3、正常情况下填入数字的流程
最终效果(在DEV-C++下运行):
输入:
005300000
800000020
070010500
400005300
010070006
003200080
060500009
004000030
000009700
005300000
800000020
070010500
400005300
010070006
003200080
060500009
004000030
000009700
输出:
145327698
839654127
672918543
496185372
218473956
753296481
367542819
984761235
521839764
145327698
839654127
672918543
496185372
218473956
753296481
367542819
984761235
521839764
具体C语言代码如下:
(此程序只解出了一个解)
#include "stdio.h"
#include "stdlib.h"
void dfs(int a[9][9], int row, int col){
int count = 0, d[9] = { 0 };