通过前面的分析,就可以写出解数独的代码了。
#include <stdio.h>
void fill(int sd[][9]); //使用回溯法求解数独
int main()
{
int sd[9][9] = { // “世界最难数独”信息
8,0,0,0,0,0,0,0,0,
0,0,3,6,0,0,0,0,0,
0,7,0,0,9,0,2,0,0,
0,5,0,0,0,7,0,0,0,
0,0,0,0,4,5,7,0,0,
0,0,0,1,0,0,0,3,0,
0,0,1,0,0,0,0,6,8,
0,0,8,5,0,0,0,1,0,
0,9,0,0,0,0,4,0,0,
};
fill(sd); //调用函数求解
return 0;
}
///////////////////////////////////////////////////////////////
void fill(int sd[][9])
{
int result = 0; //result用于记录解的个数,初始为0
int count = 0; //count用于记录需要填的空格数量,初始为0
int blank[81][2]; //blank数组用于记录所有需要填的空格的坐标
for(int i = 0;i < 9;i++) ////////////////////
for(int j = 0;j < 9;j++) //
if(sd[i][j] == 0) //
{ // 将整个数独扫描一遍,