#include <stdio.h>
int findvalue(int sudoku[9][9], int i, int j);
int main(void)
{
int sudoku[9][9] = {{0, 3, 0, 0, 0, 7, 0, 0, 0},
{1, 2, 5, 0, 0, 9, 4, 0, 0},
{0, 7, 9, 1, 0, 0, 0, 3, 0},
{0, 0, 6, 0, 8, 0, 0, 9, 1},
{0, 0, 0, 9, 5, 1, 0, 0, 0},
{9, 1, 0, 0, 7, 0, 5, 0, 0},
{0, 9, 0, 0, 0, 5, 7, 4, 0},
{0, 0, 8, 7, 0, 0, 2, 6, 9},
{0, 0, 0, 4, 0, 0, 0, 5, 0} };
int i, j, temp, empty = 0;
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
if(sudoku[i][j]==0)
empty++;
}
printf("%d\n", empty);
while(empty)
{
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
if(sudoku[i][j]==0)
{
temp = findvalue(sudoku, i, j);
if(temp==-1)
{
printf("无解!\n");
return 1;
}
sudoku[i][j] = temp;
if(temp!=0) empty--;
}
}
}
}
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
printf("%d ", sudoku[i][j]);
printf("\n");
}
return 0;
}
int findvalue(int sudoku[9][9], int i, int j)
{
int m, n, k;
int temp[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
for(k=1; k<10; k++)
{
if(temp[sudoku[i][k-1]]==0)
temp[sudoku[i][k-1]] = sudoku[i][k-1];
if(temp[sudoku[k-1][j]]==0)
temp[sudoku[k-1][j]] = sudoku[k-1][j];
}
for(m=0; m<3; m++)
for(n=0; n<3; n++)
if(temp[sudoku[i/3*3+m][j/3*3+n]]==0)
temp[sudoku[i/3*3+m][j/3*3+n]] = sudoku[i/3*3+m][j/3*3+n];
for(k=1; k<10; k++)
if(temp[k]==0)
{
temp[0]++;
m=k;
}
if(temp[0]==0)
return -1;
else if(temp[0]==1)
return m;
else
return 0;
}
转载于:https://my.oschina.net/lovewxm/blog/287772