|
1 | 1 | function n_queens(n, ::Val{:JuMP}) |
2 | 2 | model = JuMP.Model(CBLS.Optimizer) |
3 | 3 |
|
4 | | - @variable(model, queens[1:n], DiscreteSet(1:n)) |
5 | | - @constraint(model, queens in AllDifferent()) |
| 4 | + @variable(model, 1 ≤ Q[1:n] ≤ n, Int) |
| 5 | + @constraint(model, Q in AllDifferent()) |
6 | 6 |
|
7 | | - for i in 1:n |
8 | | - for j in i+1:n |
9 | | - @constraint(model, [queens[i],queens[j]] in Predicate(x -> x[1] != x[2])) |
10 | | - @constraint(model, [queens[i],queens[j]] in Predicate(x -> (x[1] != x[2]+i-j))) |
11 | | - @constraint(model, [queens[i],queens[j]] in Predicate(x -> (x[1] != x[2]+j-i))) |
12 | | - end |
| 7 | + for i in 1:n, j in i + 1:n |
| 8 | + @constraint(model, [Q[i],Q[j]] in Predicate(x -> x[1] != x[2])) |
| 9 | + @constraint(model, [Q[i],Q[j]] in Predicate(x -> x[1] != x[2] + i - j)) |
| 10 | + @constraint(model, [Q[i],Q[j]] in Predicate(x -> x[1] != x[2] + j - i)) |
13 | 11 | end |
14 | 12 |
|
15 | | - return model, queens |
| 13 | + return model, Q |
16 | 14 | end |
17 | 15 |
|
18 | 16 | """ |
19 | 17 | n_queens(n; modeler = :JuMP) |
20 | 18 |
|
21 | 19 | Create a model for the n-queens problem with `n` queens. The `modeler` argument accepts :JuMP (default), which refer to the JuMP model. |
22 | 20 | """ |
23 | | -n_queens(n; modeler = :JuMP) = n_queens(n, Val(modeler)) |
| 21 | +n_queens(n; modeler=:JuMP) = n_queens(n, Val(modeler)) |
0 commit comments