#include<iostream>
#include<cmath>
using namespace std;
bool canPlace(int matrix[][9],int i, int j ,int n, int number){
for(int x=0;x<n;x++){
if(matrix[x][i]==number||matrix[i][x]==number){
return false;
}
}
//subgrid
int rn =sqrt(n);
int sx = (i/rn)*rn;
int sy = (j/rn)*rn;
for(int x=sx;x<sx+rn;x++){
for(int y=sy;y<sy+rn;y++){
if(matrix[x][y]==number){
return false;
}
}
}
return true;
}
bool solveSudoku(int matrix[][10],int i, int j, int n){
//base case
if(i==n){
//print the matrix
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<matrix[i][j];
}
cout<<endl;
}
return true;
}
//case row ends
if(j==n){
return solveSudoku(matrix,i+1,0,n);
}
//skip the pre filled cells
if(matrix[i][j]!=0){
return solveSudoku(matrix,i,j+1,n);
}
//rec case
//fill the current cell with possible options
for(int number=1;number<=n;number++){
if(canPlace(matrix,i,j,n,number)){
//assume
matrix[i][j]=number;
bool couldWeSolve = solveSudoku(matrix,i,j+1,n);
if(couldWeSolve){
return true;
}
}
//backtrack
matrix[i][j]=0;
}
return false;
}
int main(){
int matrix[9][9] = {5,3,0,0,7,0,0,0,0},
{6,0,0,1,9,5,0,0,0},
{0,9,8,0,0,0,0,6,0},
{8,0,0,0,6,0,0,0,3},
{4,0,0,8,0,3,0,0,1},
{7,0,0,0,2,0,0,0,6},
{0,6,0,0,0,0,2,8,0},
{0,0,0,4,1,9,0,0,5},
{0,0,0,0,8,0,0,7,9};
solveSudoku(matrix,0,0,9);
return 0;}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNtYXRoPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpib29sIGNhblBsYWNlKGludCBtYXRyaXhbXVs5XSxpbnQgaSwgaW50IGogLGludCBuLCBpbnQgbnVtYmVyKXsKICAgIGZvcihpbnQgeD0wO3g8bjt4KyspewogICAgICAgIGlmKG1hdHJpeFt4XVtpXT09bnVtYmVyfHxtYXRyaXhbaV1beF09PW51bWJlcil7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CiAgICAvL3N1YmdyaWQKICAgIGludCBybiA9c3FydChuKTsKICAgIGludCBzeCA9IChpL3JuKSpybjsKICAgIGludCBzeSA9IChqL3JuKSpybjsKCiAgICBmb3IoaW50IHg9c3g7eDxzeCtybjt4KyspewogICAgICAgIGZvcihpbnQgeT1zeTt5PHN5K3JuO3krKyl7CiAgICAgICAgICAgIGlmKG1hdHJpeFt4XVt5XT09bnVtYmVyKXsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwp9CmJvb2wgc29sdmVTdWRva3UoaW50IG1hdHJpeFtdWzEwXSxpbnQgaSwgaW50IGosIGludCBuKXsKICAgIC8vYmFzZSBjYXNlCiAgICBpZihpPT1uKXsKICAgICAgICAvL3ByaW50IHRoZSBtYXRyaXgKICAgICAgICBmb3IoaW50IGk9MDtpPG47aSsrKXsKICAgICAgICAgICAgZm9yKGludCBqPTA7ajxuO2orKyl7CiAgICAgICAgICAgICAgICBjb3V0PDxtYXRyaXhbaV1bal07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY291dDw8ZW5kbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICAvL2Nhc2Ugcm93IGVuZHMKICAgIGlmKGo9PW4pewogICAgICAgIHJldHVybiBzb2x2ZVN1ZG9rdShtYXRyaXgsaSsxLDAsbik7CiAgICB9CiAgICAvL3NraXAgdGhlIHByZSBmaWxsZWQgY2VsbHMKICAgIGlmKG1hdHJpeFtpXVtqXSE9MCl7CiAgICAgIHJldHVybiBzb2x2ZVN1ZG9rdShtYXRyaXgsaSxqKzEsbik7CiAgICB9CiAgICAvL3JlYyBjYXNlCiAgICAvL2ZpbGwgdGhlIGN1cnJlbnQgY2VsbCB3aXRoIHBvc3NpYmxlIG9wdGlvbnMKICAgIGZvcihpbnQgbnVtYmVyPTE7bnVtYmVyPD1uO251bWJlcisrKXsKICAgICAgICBpZihjYW5QbGFjZShtYXRyaXgsaSxqLG4sbnVtYmVyKSl7CiAgICAgICAgICAgIC8vYXNzdW1lCiAgICAgICAgICAgIG1hdHJpeFtpXVtqXT1udW1iZXI7CgogICAgICAgICAgICBib29sIGNvdWxkV2VTb2x2ZSA9IHNvbHZlU3Vkb2t1KG1hdHJpeCxpLGorMSxuKTsKICAgICAgICAgICAgaWYoY291bGRXZVNvbHZlKXsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICAvL2JhY2t0cmFjawogICAgICAgICAgICBtYXRyaXhbaV1bal09MDsKICAgIH0KCiAgICByZXR1cm4gZmFsc2U7Cn0KaW50IG1haW4oKXsKCiAgICBpbnQgbWF0cml4WzldWzldID0gezUsMywwLDAsNywwLDAsMCwwfSwKICAgICAgICAgICAgICAgICAgICAgICB7NiwwLDAsMSw5LDUsMCwwLDB9LAogICAgICAgICAgICAgICAgICAgICAgIHswLDksOCwwLDAsMCwwLDYsMH0sCiAgICAgICAgICAgICAgICAgICAgICAgezgsMCwwLDAsNiwwLDAsMCwzfSwKICAgICAgICAgICAgICAgICAgICAgICB7NCwwLDAsOCwwLDMsMCwwLDF9LAogICAgICAgICAgICAgICAgICAgICAgIHs3LDAsMCwwLDIsMCwwLDAsNn0sCiAgICAgICAgICAgICAgICAgICAgICAgezAsNiwwLDAsMCwwLDIsOCwwfSwKICAgICAgICAgICAgICAgICAgICAgICB7MCwwLDAsNCwxLDksMCwwLDV9LAogICAgICAgICAgICAgICAgICAgICAgIHswLDAsMCwwLDgsMCwwLDcsOX07CiAgICBzb2x2ZVN1ZG9rdShtYXRyaXgsMCwwLDkpOwoKCnJldHVybiAwO30K
prog.cpp: In function ‘bool solveSudoku(int (*)[10], int, int, int)’:
prog.cpp:47:21: error: cannot convert ‘int (*)[10]’ to ‘int (*)[9]’
if(canPlace(matrix,i,j,n,number)){
^~~~~~
prog.cpp:4:19: note: initializing argument 1 of ‘bool canPlace(int (*)[9], int, int, int, int)’
bool canPlace(int matrix[][9],int i, int j ,int n, int number){
~~~~^~~~~~~~~~~
prog.cpp: In function ‘int main()’:
prog.cpp:65:24: error: expected unqualified-id before ‘{’ token
{6,0,0,1,9,5,0,0,0},
^
prog.cpp:65:43: error: expected primary-expression before ‘,’ token
{6,0,0,1,9,5,0,0,0},
^
prog.cpp:66:24: error: expected primary-expression before ‘{’ token
{0,9,8,0,0,0,0,6,0},
^
prog.cpp:66:43: error: expected primary-expression before ‘,’ token
{0,9,8,0,0,0,0,6,0},
^
prog.cpp:67:24: error: expected primary-expression before ‘{’ token
{8,0,0,0,6,0,0,0,3},
^
prog.cpp:67:43: error: expected primary-expression before ‘,’ token
{8,0,0,0,6,0,0,0,3},
^
prog.cpp:68:24: error: expected primary-expression before ‘{’ token
{4,0,0,8,0,3,0,0,1},
^
prog.cpp:68:43: error: expected primary-expression before ‘,’ token
{4,0,0,8,0,3,0,0,1},
^
prog.cpp:69:24: error: expected primary-expression before ‘{’ token
{7,0,0,0,2,0,0,0,6},
^
prog.cpp:69:43: error: expected primary-expression before ‘,’ token
{7,0,0,0,2,0,0,0,6},
^
prog.cpp:70:24: error: expected primary-expression before ‘{’ token
{0,6,0,0,0,0,2,8,0},
^
prog.cpp:70:43: error: expected primary-expression before ‘,’ token
{0,6,0,0,0,0,2,8,0},
^
prog.cpp:71:24: error: expected primary-expression before ‘{’ token
{0,0,0,4,1,9,0,0,5},
^
prog.cpp:71:43: error: expected primary-expression before ‘,’ token
{0,0,0,4,1,9,0,0,5},
^
prog.cpp:72:24: error: expected primary-expression before ‘{’ token
{0,0,0,0,8,0,0,7,9};
^
prog.cpp:73:17: error: cannot convert ‘int (*)[9]’ to ‘int (*)[10]’
solveSudoku(matrix,0,0,9);
^~~~~~
prog.cpp:24:22: note: initializing argument 1 of ‘bool solveSudoku(int (*)[10], int, int, int)’
bool solveSudoku(int matrix[][10],int i, int j, int n){
~~~~^~~~~~~~~~~~