#include using namespace std; typedef IloArray IloIntVarArray2; int main(int , const char * []){ IloEnv env; try { IloInt n = 10; IloInt magic_number = n*(n*n+1)/2; IloIntVarArray allVars(env); IloIntVarArray2 X(env); //X[i][j] é a linha i coluna j for(int i = 0; i < n; i++){ X.add(IloIntVarArray(env, n, 1, n*n)); for(int j = 0; j < n; j++){ allVars.add(X[i][j]); } } IloModel model(env); //linhas for(int i = 0; i < n; i++){ model.add(IloSum(X[i]) == magic_number); } //colunas for(int j = 0; j < n; j++){ IloExpr expr(env); for(int i = 0; i < n; i++){ expr += X[i][j]; } model.add(expr == magic_number); } IloExpr d1(env); for(int i = 0; i < n;i++){ d1 += X[i][i]; } model.add(d1 == magic_number); IloExpr d2(env); for(int i = 0; i < n;i++){ d2 += X[n-1-i][i]; } model.add(d2 == magic_number); model.add(IloAllDiff(env, allVars)); IloCP solver(model); if(solver.solve()){ for(int i = 0; i < n;i++){ for(int j = 0; j < n; j++){ cout << solver.getValue(X[i][j]) << " "; } cout << endl; } } } catch (IloException& ex) { env.out() << "Error: " << ex << std::endl; } env.end(); return 0; }