#include #include #include using namespace std; void displayPuzzle(vector >& puzzle){ int i,j; for(i=0;i<9;i++){ for(j=0;j<9;j++){ cout << puzzle[i][j]; if(j<8){ cout << " "; } } cout << endl; } } bool checkRow(vector< vector > &sudoku,int i, int j,int n){ bool result=true; for(int k=0;k<9;k++){ if(sudoku[i][k]==n){ result =false; return result; } } return result; } bool checkCol(vector< vector > &sudoku,int i,int j,int n){ bool result=true; for(int k=0;k<9;k++){ if(sudoku[k][j]==n){ result =false; return result; } } return result; } bool checkBox(vector< vector > &sudoku,int i,int j,int n){ bool result=true; int y,x; if(i<3){ x=0; } else if(i<6){ x=3; } else{ x=6; } if(j<3){ y=0; } else if(j<6){ y=3; } else{ y=6; } for(int k=x;k<(x+3);k++){ for(int h=y;h<(y+3);h++){ if(sudoku[k][h]==n){ result =false; return result; } } } return result; } void findZero(vector< vector > & sudoku, int &k,int &h){ int found=0; for(int i=0;i<9;i++){ for(int j=0;j<9;j++){ if(sudoku[i][j]==0){ k=i; h=j; found=1; break; } } if(found==1){ break; } } } bool enterNumber(vector< vector > & sudoku,int &count){ bool result; int x=0,y=0,num; if(count==81){ result = true; } else{ result = false; findZero(sudoku,x,y); num = 1; count++; while(result==false && num<10){ if(num==10){ break; } if(checkCol(sudoku,x,y,num)==true && checkRow(sudoku,x,y,num)==true && checkBox(sudoku,x,y,num)==true){ sudoku[x][y]=num; result = enterNumber(sudoku,count); if(result==false){ sudoku[x][y]=0; } } num++; } } if(result==false){ count--; } return result; } void solvePuzzle(vector< vector > & sudoku,int &count){ bool result; result =enterNumber(sudoku,count); displayPuzzle(sudoku); } void storePuzzle(vector< vector > & sudoku,int &count){ int p=0,count2; int board=0; sudoku.resize(9); for(int i=0;i<9;i++){ sudoku[i].resize(9); } while(!cin.eof()){ for(int i=0;i<9;i++){ for(int k = 0;k<9;k++){ cin >> sudoku[i][k]; } } for(int i=0;i<9;i++){ for(int k = 0;k<9;k++){ if(sudoku[i][k]!=0){ count++; } } } if(count==count2) break; if (p==0){ p=1; } else{ cout << endl; } solvePuzzle(sudoku,count); count2=count; count=0; } } int main(){ int count=0; vector< vector > sudoku; storePuzzle(sudoku,count); return 0; } /* void storePuzzle(vector< vector > & sudoku,int &count){ int i=1,x=0,j,k,f=0,p=0; ifstream Puzzle; vector row; sudoku.resize(9); for(int i=0;i<9;i++){ sudoku[i].resize(9); } while(!cin.eof()){ for(int i=0;i<9;i++){ for(int k = 0;k<9;k++){ cin >> sudoku[i][k]; if(x==0){ j=sudoku[i][k]; } if(x!=0 && j==sudoku[i][k]){ f=1; break; } if(sudoku[i][k]!=0){ count++; } } } x++; if(f==1){ p=1; break; } else if(p!=0){ p=1; cout << endl; } solvePuzzle(sudoku,count); count=0; } } */