void countThaLoc(int** table, int size, int i, int j) { int a, b; printf("[i:%d ,j:%d, usedBi:%d]\n",i,j, usedBi); //checkSafe를 통해 안전한지 확인하고 안전하지 않다면 그냥 리턴 if(table[i][j]==1) { printf("SFSFSAFSAFSAFSADFSADF\n"); checkDange=0; return; } if(checkSafe(table, size, i, j)==1) { printf("DANGER\n"); return; } // table[i][j]=1; usedBi++; printTheTable(table, size); if(usedBi==numOfbi) { table[i][j]=0; count++; checkDange=1; printf("count : %d\n",count); usedBi--; return; } for(a=i; a<size; a++) { for(b=j; b<size; b++) { countThaLoc(table, size, a, b); if(checkDange==1) { table[a][b]=0; checkDange=1; } } j=0; } printf("'function finishied'\n"); usedBi--; checkDange=1; }
//Main solver function bool fillSudoku() { int row, col; //Check whether grid is filled; if not then return first unassigned value if(!findUnassigned(row, col)) { return TRUE; } //Backtracking is used here. int num; for(num=1;num<SIZE+1;num++) { if(checkSafe(row,col,num)) { cell[row][col]=num; if(fillSudoku()) return TRUE; cell[row][col]=0; } } return FALSE; }
void MainWindow::on_solve_clicked() { int i,j; int flag=0; for(i=0;i<n;i++) { for(j=0;j<n;j++) { QString str = entries[i][j]->text(); int number=str.toInt(); if(number==0&&str!="") { red->setColor(QPalette::Text,Qt::black); entries[i][j]->setPalette(*red); flag=1; entries[i][j]->setText(""); } if(number<=9&&number>=1) cell[i][j]=number; } } if(flag==1) //any value is out of bound { QMessageBox *message = new QMessageBox(); message->setWindowTitle("Error"); message->setText("Out of range value."); message->setStandardButtons(QMessageBox::Ok); message->setDefaultButton(QMessageBox::Ok); message->setFocus(); if(message->exec()==QMessageBox::Ok) { black->setColor(QPalette::Text,Qt::black); } black->setColor(QPalette::Text,Qt::black); flag=0; } else // no value is out of bound { int flag2=0; // for invalid input for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(cell[i][j]!=0) { if(checkSafe(i,j,cell[i][j])) continue; else { flag2=1;red->setColor(QPalette::Text,Qt::red); entries[i][j]->setPalette(*red); } } } } if(flag2==1) //yes there is invalid input { QMessageBox *message = new QMessageBox(); message->setWindowTitle("Error"); message->setText("Invalid input."); message->setStandardButtons(QMessageBox::Ok); message->setDefaultButton(QMessageBox::Ok); message->setFocus(); if(message->exec()==QMessageBox::Ok) {} for(i=0;i<n;i++) { for(j=0;j<n;j++) { cell[i][j]=0; black->setColor(QPalette::Text,Qt::black); entries[i][j]->setPalette(*black); } } flag=0; } else { fillSudoku(); yellow->setColor(QPalette::Text,Qt::blue); for(i=0;i<n;i++) { for(j=0;j<n;j++) { QString str = entries[i][j]->text(); int number=str.toInt(); if(str=="") { entries[i][j]->setPalette(*yellow); entries[i][j]->setText(QString::number(cell[i][j])); } } } } //inner else } //else } //function