#include <stdio.h>
#include <string.h>
int data[9][9], try[9][9];
void init()
{
int i, j;
for(i = 0; i < 9; ++i)
for(j = 0; j < 9; ++j)
try[i][j] = 511;
return;
}
int dfs(int x, int y)
{
int nx, ny, t, bit = 1, xt, yt, b = 1, i, j;
int try0[9][9];
if (y == 9) return 1;
if (x == 8)
{
nx = 0; ny = y + 1;
}
else
{
nx = x + 1; ny = y;
}
if (data[x][y]) return dfs(nx, ny);
for (t = try[x][y]; t; t >>= 1, bit <<= 1, ++b)
if (t & 1)
{
memcpy(*try0, *try, 81 * sizeof(int));
bit = ~bit;
xt = x / 3 * 3; yt = y / 3 * 3;
for (i = 0; i < 3; ++i)
for (j = 0; j < 3; ++j)
{
try[3 * j + i][y] &= bit;
try[x][3 * j + i] &= bit;
try[xt + i][yt + j] &= bit;
}
bit = ~bit;
data[x][y] = b;
if (dfs(nx, ny)) return 1;
memcpy(*try, *try0, 81 * sizeof(int));
data[x][y] = 0;
}
return 0;
}
int print()
{
int i, j;
for (i = 0; i < 9; ++i)
{
for (j = 0; j < 9; ++j)
printf("%d ", data[i][j]);
printf("\n");
}
}
int main()
{
init();
dfs(0, 0);
print();
return 0;
}
| Compilation | N/A | N/A | Compile Error | Score: N/A | 显示更多 |