witam,
mam problem ze sprawdzaniem poprawnosci losowo wygenreowanej ukladanki sudoku. Umiem wygenerowac losowe liczby, ale chcialabym, aby liczby spelnialy warunki ukladanki sudoku.
kod funkcji sprawdzajacej warunki sudoku:
int input_value(int x, int y, int value){
int i,j;
// Scan horizontally and vertically
for (i = 0; i < 9; i++) {
if (value == outputArray[i][y] || value == outputArray[x][i]) {
return 0;
}
}
// Scan its own square
if (x < 3) {
if (y < 3) {
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
if (value == outputArray[i][j]) {
return 0;
}
}
}
} else if (y < 6) {
for (i = 0; i < 3; i++) {
for (j = 3; j < 6; j++) {
if (value == outputArray[i][j]) {
return 0;
}
}
}
} else {
for (i = 0; i < 3; i++) {
for (j = 6; j < 9; j++) {
if (value == outputArray[i][j]) {
return 0;
}
}
}
}
} else if (x < 6) {
if (y < 3) {
for (i = 3; i < 6; i++) {
for (j = 0; j < 3; j++) {
if (value == outputArray[i][j]) {
return 0;
}
}
}
} else if (y < 6) {
for (i = 3; i < 6; i++) {
for (j = 3; j < 6; j++) {
if (value == outputArray[i][j]) {
return 0;
}
}
}
} else {
for (i = 3; i < 6; i++) {
for (j = 6; j < 9; j++) {
if (value == outputArray[i][j]) {
return 0;
}
}
}
}
} else {
if (y < 3) {
for (i = 6; i < 9; i++) {
for (j = 0; j < 3; j++) {
if (value == outputArray[i][j]) {
return 0;
}
}
}
} else if (y < 6) {
for (i = 6; i < 9; i++) {
for (j = 3; j < 6; j++) {
if (value == outputArray[i][j]) {
return 0;
}
}
}
} else {
for (i = 6; i < 9; i++) {
for (j = 6; j < 9; j++) {
if (value == outputArray[i][j]) {
return 0;
}
}
}
}
}
return value;
}
a to kod generujacy te liczby:
int main(){
randomize();
int ile;
cout<<"ile elementow?";
cin>>ile;
if(ile >=81)
{
cout<<"zla liczba";
}
int outputArray[8][8];
for(int i =0; i<9; i++)
{
for(int j =0; j<9; j++)
{
outputArray[i][j] = 0;
}
}
int czySieZgadza ;
czySieZgadza = 0;
do
{
int wiersz = random(9);
int kolumna = random(9);
if (outputArray[wiersz][kolumna] == 0)
{
outputArray[wiersz][kolumna] = 1;
czySieZgadza++;
}
}while( czySieZgadza <=ile) ;
for(int i =0; i<9; i++)
{
for(int j =0; j<9; j++)
{
while(outputArray[i][j] == 1)
{
//---------------------------------------------
outputArray[i][j] = random(9)+1;
while(input_value(i,j,outputArray[i][j]) == 0)
{
outputArray[i][j]=random(9)+1;
}
//---------------------------------------------
}
cout<<outputArray[i][j];
} cout<<"\n";
}
system("pause");
return 0;
}
}