113 lines
1.6 KiB
Plaintext
113 lines
1.6 KiB
Plaintext
[loop]
|
|
input "How many queens (N>=4)";n
|
|
if n < 4 then
|
|
print "Must be greater than 4"
|
|
goto [loop]
|
|
end if
|
|
|
|
dim plot$(100,100)
|
|
dim q(n+20)
|
|
dim e(n+20)
|
|
dim o(n+20)
|
|
r=n mod 6
|
|
if r<>2 and r<>3 then
|
|
gosub [samp]
|
|
goto [shoBoard]
|
|
end if
|
|
for i=1 to int(n/2)
|
|
e(i) = 2 * i
|
|
next
|
|
for i=1 to int((n/2)+.5)
|
|
o(i) = 2 *i-1
|
|
next
|
|
if r = 2 then gosub [edt2]
|
|
if r = 3 then gosub [edt3]
|
|
s = 1
|
|
for i=1 to n
|
|
if e(i)>0 then
|
|
q(s) = e(i)
|
|
s = s+1
|
|
end if
|
|
next
|
|
for i=1 to n
|
|
if o(i) > 0 then
|
|
q(s) = o(i)
|
|
s = s + 1
|
|
end if
|
|
next
|
|
' print board
|
|
[shoBoard]
|
|
cls
|
|
for i = 1 to n
|
|
plot$(i,26-q(i)) = "*"
|
|
plot$(i,24-n) = chr$(96+i)
|
|
plot$(n+1,26-i) = str$(i)
|
|
next i
|
|
for ii = 1 to 100
|
|
for jj = 1 to 100
|
|
print left$(plot$(jj,ii)+" ",1);
|
|
next jj
|
|
print
|
|
next ii
|
|
end
|
|
|
|
' the simple case
|
|
[samp]
|
|
p = 1
|
|
for i = 1 to n
|
|
if i mod 2=0 then
|
|
q(p) = i
|
|
p = p + 1
|
|
end if
|
|
next i
|
|
for i = 1 to n
|
|
if i mod 2 then
|
|
q(p) = i
|
|
p = p + 1
|
|
end if
|
|
next
|
|
return
|
|
' edit list when remainder is 2
|
|
[edt2]
|
|
for i=1 to n
|
|
if o(i) = 3 then
|
|
o(i) = 1
|
|
else
|
|
if o(i)=1 then o(i) = 3
|
|
end if
|
|
if o(i) = 5 then
|
|
o(i)= o(i) -1
|
|
else
|
|
if o(i) = 0 then
|
|
o(i) = 5
|
|
return
|
|
end if
|
|
end if
|
|
next
|
|
|
|
' edit list when remainder is 3
|
|
[edt3]
|
|
for i = 1 to n
|
|
if e(i) = 2 then
|
|
e(i) = e(i)-1
|
|
else
|
|
if e(i) = 0 then
|
|
e(i) = 2
|
|
goto [more]
|
|
end if
|
|
end if
|
|
next i
|
|
' edit list some more
|
|
[more]
|
|
for i = 1 to n
|
|
if (o(i)=1 or o(i)=3) then
|
|
o(i) = o(i)-1
|
|
else
|
|
if o(i) = 0 then
|
|
o(i) = 1
|
|
o(i+1) = 3
|
|
return
|
|
end if
|
|
end if
|
|
next
|