September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
60
Task/N-queens-problem/Stata/n-queens-problem-1.stata
Normal file
60
Task/N-queens-problem/Stata/n-queens-problem-1.stata
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
mata
|
||||
real matrix queens(real scalar n) {
|
||||
real scalar i, j, k, p, q
|
||||
real rowvector a, s, u, v
|
||||
real matrix m
|
||||
|
||||
m = J(0, n, .)
|
||||
a = 1..n
|
||||
s = J(1, n, 0)
|
||||
u = J(1, 2*n-1, 1)
|
||||
v = J(1, 2*n-1, 1)
|
||||
i = j = 1
|
||||
L1: k = a[j]
|
||||
a[j] = a[i]
|
||||
a[i] = k
|
||||
p = i-k+n
|
||||
q = i+k-1
|
||||
if (u[p] & v[q]) {
|
||||
s[i++] = j
|
||||
u[p] = v[q] = 0
|
||||
if (i > n) {
|
||||
m = m\a
|
||||
goto L3
|
||||
}
|
||||
j = i
|
||||
goto L1
|
||||
}
|
||||
L2: if (++j <= n) goto L1
|
||||
while (--j > i) {
|
||||
k = a[i]
|
||||
a[i] = a[j]
|
||||
a[j] = k
|
||||
}
|
||||
L3: if (--i == 0) return(m)
|
||||
p = i-a[i]+n
|
||||
q = i+a[i]-1
|
||||
j = s[i]
|
||||
u[p] = v[q] = 1
|
||||
goto L2
|
||||
}
|
||||
|
||||
a = queens(8)
|
||||
e = I(8)
|
||||
1:/e[a[1,.],.]
|
||||
1 2 3 4 5 6 7 8
|
||||
+---------------------------------+
|
||||
1 | 1 . . . . . . . |
|
||||
2 | . . . . 1 . . . |
|
||||
3 | . . . . . . . 1 |
|
||||
4 | . . . . . 1 . . |
|
||||
5 | . . 1 . . . . . |
|
||||
6 | . . . . . . 1 . |
|
||||
7 | . 1 . . . . . . |
|
||||
8 | . . . 1 . . . . |
|
||||
+---------------------------------+
|
||||
|
||||
|
||||
rows(a)
|
||||
92
|
||||
end
|
||||
4
Task/N-queens-problem/Stata/n-queens-problem-2.stata
Normal file
4
Task/N-queens-problem/Stata/n-queens-problem-2.stata
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
clear
|
||||
mata: a=queens(8)
|
||||
getmata (a*)=a
|
||||
save queens, replace
|
||||
58
Task/N-queens-problem/Stata/n-queens-problem-3.stata
Normal file
58
Task/N-queens-problem/Stata/n-queens-problem-3.stata
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
mata
|
||||
real matrix queens(real scalar n) {
|
||||
real rowvector a, u, v
|
||||
real matrix m
|
||||
|
||||
a = 1..n
|
||||
u = J(1, 2*n-1, 1)
|
||||
v = J(1, 2*n-1, 1)
|
||||
m = J(0, n, .)
|
||||
queens_aux(n, 1, a, u, v, m)
|
||||
return(m)
|
||||
}
|
||||
|
||||
void queens_aux(real scalar n, real scalar i, real rowvector a,
|
||||
real rowvector u, real rowvector v, real matrix m) {
|
||||
|
||||
real scalar j, k, s
|
||||
|
||||
if (i > n) {
|
||||
m = m\a
|
||||
} else {
|
||||
for (k = i; k <= n; k++) {
|
||||
j = a[k]
|
||||
p = i+j-1
|
||||
q = i-j+n
|
||||
if (u[p] & v[q]) {
|
||||
u[p] = v[q] = 0
|
||||
s = a[i]
|
||||
a[i] = a[k]
|
||||
a[k] = s
|
||||
queens_aux(n, i+1, a, u, v, m)
|
||||
u[p] = v[q] = 1
|
||||
s = a[i]
|
||||
a[i] = a[k]
|
||||
a[k] = s
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
a = queens(8)
|
||||
e = I(8)
|
||||
1:/e[a[1,.],.]
|
||||
1 2 3 4 5 6 7 8
|
||||
+---------------------------------+
|
||||
1 | 1 . . . . . . . |
|
||||
2 | . . . . 1 . . . |
|
||||
3 | . . . . . . . 1 |
|
||||
4 | . . . . . 1 . . |
|
||||
5 | . . 1 . . . . . |
|
||||
6 | . . . . . . 1 . |
|
||||
7 | . 1 . . . . . . |
|
||||
8 | . . . 1 . . . . |
|
||||
+---------------------------------+
|
||||
|
||||
rows(a)
|
||||
92
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue