Jan 18, 2019 at 9:11pm
Hello, i`ve made sudoku project. Problem is in the square. There have been two or three same numbers.
Sudoku table before:
0 1 0 0 0 0 0 0 0
0 0 0 5 0 0 0 0 0
0 0 0 0 0 0 0 0 3
0 0 0 0 0 0 0 2 0
0 0 0 8 0 0 0 0 0
0 0 0 0 0 4 0 0 0
0 0 0 0 0 0 0 0 0
0 0 9 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
Sudoku table after
2 1 3 4 6 7 5 8 9
4 6 8 5 5 9 1 7 2
5 9 7 1 2 8 4 6 3
1 3 4 5 7 6 9 2 8
6 7 2 8 9 1 3 4 5
9 8 5 2 3 4 6 1 7
3 2 1 6 8 5 7 9 4
7 5 9 9 4 2 8 3 1
8 4 9 7 1 3 2 5 6
Press any key to continue . . .
Problematic part of code:
bool sudoku_square(int row,int column){
int square_row = row/3;
int square_column = column/3;
for (int i = square_row*3; i < (square_row*3 + 3); i++){
for (int j = square_column*3; j < (square_column*3 + 3); j++){
if (!(i == row && j == column)){
if (matrix[ row ][column ].number == matrix[i][j].number)
return false;
}
}
}
return true;
}
Last edited on Jan 18, 2019 at 9:21pm
Jan 18, 2019 at 10:07pm
Hi Niksy50,
Please always user code tags, the small <> icon on the right of the text box.
Can you post your entire code, the piece of code you posted is out of contexte, therefore it's hard to identify what's wrong with it
Jan 18, 2019 at 10:14pm
I don't see anything wrong with your posted snippet.
The problem must be elsewhere.
Jan 19, 2019 at 11:53am
struct Sudoku{
int number;
bool pr;
} matrix[9][9];
void sudoku_table() {
matrix[0][1].number = 1;
matrix[1][3].number = 4;
matrix[2][8].number = 7;
matrix[3][7].number = 5;
matrix[4][4].number = 9;
matrix[6][8].number = 3;
matrix[7][1].number = 6;
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
cout << matrix[i][j].number << " ";
}
cout << endl;
}
}
bool s_row(int row,int column){
for(int j=0;j<9;j++){
if(j!=column)
if(matrix[row][j].number == matrix[row][column].number)
return false;
}
return true;
}
bool s_column(int row,int column){
for(int i=0;i<9;i++){
if(i!=row)
if(matrix[i][column].number == matrix[row][column].number)
return false;
}
return true;
}
bool solve(int row, int column){
while (matrix[row][column].pr == true) //provjera redaka i stupaca matrice
{
column++;
if(column > 8){
column = 0;
row++;
}
if (row> 8){
return true;
}
}
for (int n = 1; n < 10; n++){ //upis brojeva u 2d matricu
int nextrow, nextcolumn;
matrix[row][column].number= n;
if ( s_row(row, column)
&& s_stupca(row, column)&& sudoku_square(row,column)){
nextrow = row;
nextcolumn = column;
nextcolumn++;
if(nextcolumn > 8){
nextcolumn = 0;
nextrow++;
}
if(nextcolumn==0 && nextrow ==9){
return true;
}
if(solve(nextrow,nextcolumn)){
return true;
}
}
}
matrix[row][column].number = 0;
return false;
}