#include <iostream>
#include <cstdlib>
using namespace std;
const int SIZE = 9;
int sudoku[SIZE][SIZE];
int test_array[SIZE*SIZE][SIZE] = {0};
bool checkrow(int, int);
bool checkcol(int, int);
bool checksqr(int, int);
bool test(int, int);
void moveback(int& i, int& j);
void write(int i, int j);
void print();
int main()
{
srand(rand() ^ time(0));
int i, j;
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
for(;;)
{
if(!test(i, j))
moveback(i, j);
sudoku[i][j] = rand()%9+1;
write(i, j);
if(checksqr(i, j) && checkrow(i, j) && checkcol(i, j) )
break;
}
}
}
print();
return 0;
}
bool checkrow(int x, int y)
{
for(int i=0; i<y; i++)
if(sudoku[x][i] == sudoku[x][y])
return false;
return true;
}
bool checkcol(int x, int y)
{
for(int i=0; i<x; i++)
if(sudoku[i][y] == sudoku[x][y])
return false;
return true;
}
bool checksqr(int x, int y)
{
int i_start = x/3; i_start *= 3;
int j_start = y/3; j_start *= 3;
for(int i=i_start; i < i_start+3; i++)
for(int j=j_start; j < j_start+3; j++)
{
if(i==x && j==y)
return true;
if(sudoku[i][j] == sudoku[x][y])
return false;
}
return true;
}
bool test(int i, int j)
{
int current = i*9 +j+1;
for(int x=1; x<9; x++)
if( test_array[current][x] == 0)
return true;
return false;
}
void moveback(int& i, int& j)
{
int current = i*9 +j+1;
for(int x=0; x<9; x++)
test_array[current][x] = 0;
if(j < 1)
{
i--; j=8;
}
else
j--;
}
void write(int i, int j)
{
int current = i*9 + j+1;
int value = sudoku[i][j];
test_array[current][value] = 1;
}
void print()
{
int i, j;
for(i=0; i<9; i++)
{
if( i%3 == 0 )
cout << "=========================\n";
cout << "| ";
for(j=0; j<9; j++)
{
cout << sudoku[i][j] << " ";
if((j+1)%3 == 0)
cout << "| ";
}
cout << endl;
}
cout << "=========================\n";
}
for(;;)
{
...
...
...
if(checksqr(i, j) && checkrow(i, j) && checkcol(i, j) )
break;
}
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.