39int main(
int argc,
char *argv[])
43 std::cerr <<
"call " << argv[0] <<
" <puzzle file> " <<
"\n";
47 std::string puzzlefilepath = argv[1];
49 std::cout <<
"The unsolved Sudoku Puzzle is: " <<
"\n";
69 std::vector<std::vector<std::vector< SCIP_VAR* >>> xvars(9, std::vector<std::vector< SCIP_VAR* >>(9, std::vector< SCIP_VAR* >(9)));
70 std::ostringstream namebuf;
72 for(
size_t i = 0;
i < 9; ++
i )
74 for(
size_t j = 0; j < 9; ++j )
76 for(
size_t k = 0; k < 9; ++k )
80 namebuf <<
"x[" <<
i <<
"," << j <<
"," << k <<
"]";
84 namebuf.str().c_str(),
101 std::vector< SCIP_CONS* > columnconstraints;
102 for(
size_t j = 0; j < 9; ++j )
104 for(
size_t k = 0; k < 9; ++k )
108 namebuf <<
"col_" << j <<
"_" << k <<
"]";
116 namebuf.str().c_str(),
122 for(
size_t i = 0;
i < 9; ++
i )
128 columnconstraints.push_back(cons);
136 std::vector< SCIP_CONS* > rowconstraints;
137 for(
size_t i = 0;
i < 9; ++
i )
139 for(
size_t k = 0; k < 9; ++k )
144 namebuf <<
"row_" <<
i <<
"_" << k <<
"]";
152 namebuf.str().c_str(),
158 for(
size_t j = 0; j < 9; ++j )
164 rowconstraints.push_back(cons);
174 std::vector< SCIP_CONS* > subgridconstraints;
175 for(
size_t k = 0; k < 9; ++k )
177 for(
size_t p = 0; p < 3; ++p )
179 for(
size_t q = 0; q < 3; ++q )
184 namebuf <<
"subgrid_" << k <<
"_" << p <<
"_" << q <<
"]";
192 namebuf.str().c_str(),
200 for(
size_t j = 3 * (p + 1) - 3; j < 3 * (p + 1); ++j )
202 for(
size_t i = 3 * (q + 1) - 3;
i < 3 * (q + 1); ++
i )
208 subgridconstraints.push_back(cons);
223 std::vector< SCIP_CONS* > fillgridconstraints;
224 for(
size_t i = 0;
i < 9; ++
i )
226 for(
size_t j = 0; j < 9; ++j )
231 namebuf <<
"fillgrid_" <<
i <<
"_" << j <<
"]";
239 namebuf.str().c_str(),
246 for(
size_t k = 0; k < 9; ++k )
252 fillgridconstraints.push_back(cons);
261 for(
size_t i = 0;
i < 9; ++
i )
263 for(
size_t j = 0; j < 9; ++j )
266 if( puzzle[
i][j] > 0 )
296 for(
size_t i = 0;
i < 9; ++
i )
298 for(
size_t j = 0; j < 9; ++j )
300 for(
size_t k = 0; k < 9; ++k )
305 puzzle[
i][j] = k + 1;
310 std::cout <<
"The solved puzzle is: "
317 std::cout <<
"Check the Input puzzle"
322 std::cerr <<
"Something went wrong during the optimization." <<
"\n";
327 for(
size_t i = 0;
i < 9; ++
i )
329 for(
size_t j = 0; j < 9; ++j )
331 for(
size_t k = 0; k < 9; ++k )
342 for(
auto &constr : columnconstraints )
346 columnconstraints.clear();
348 for(
auto &constr : rowconstraints )
352 rowconstraints.clear();
354 for(
auto &constr : subgridconstraints )
358 subgridconstraints.clear();
360 for(
auto &constr : fillgridconstraints )
364 fillgridconstraints.clear();
SCIP_RETCODE SCIPaddCoefLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
SCIP_RETCODE SCIPcreateConsBasicLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs)
SCIP_RETCODE SCIPfree(SCIP **scip)
SCIP_RETCODE SCIPcreate(SCIP **scip)
SCIP_STATUS SCIPgetStatus(SCIP *scip)
SCIP_RETCODE SCIPaddVar(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPsetObjsense(SCIP *scip, SCIP_OBJSENSE objsense)
SCIP_RETCODE SCIPcreateProbBasic(SCIP *scip, const char *name)
SCIP_RETCODE SCIPsetIntParam(SCIP *scip, const char *name, int value)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
SCIP_SOL * SCIPgetBestSol(SCIP *scip)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
SCIP_RETCODE SCIPsolve(SCIP *scip)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_RETCODE SCIPfixVar(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_Bool *infeasible, SCIP_Bool *fixed)
SCIP_RETCODE SCIPcreateVarBasic(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype)
assert(minobj< SCIPgetCutoffbound(scip))
std::vector< std::vector< int > > getSudokuPuzzle(const std::string &filepath)
void printSudoku(const std::vector< std::vector< int > > &sudokupuzzle)
SCIP_RETCODE SCIPincludeDefaultPlugins(SCIP *scip)
int main(int argc, char *argv[])
A set of utilities that are used to read the puzzle and display the puzzle.
struct SCIP_Cons SCIP_CONS
enum SCIP_Status SCIP_STATUS