Другой старинной шахматной задачей является задача об обходе доски конём,чтобы на каждом поле конь побывал только один раз.Здесь предлагается программа реализующая правило Варнсдорфа – конь ходит на поле с которого у него будет меньше всего ходов. Если таких ходов несколько,выбирается любой. Этот алгоритм реализуется не в 100% случаев(может быть в 99%).Первая программа с визуализацией для обычной шахматной доски, вторая - для любой квадратной доски выдаёт только список положений коня.Она может запускаться и в домашних версиях XP и Vista без эмулятора Dos.
'l - счет возможных ходов
DECLARE SUB doska ()
RANDOMIZE TIMER
OPEN "Varnsdor" FOR OUTPUT AS #1
CLS
INPUT " x0="; x0
INPUT " y0="; y0
CLS
CALL doska
k = 1.2
DIM n(65), x$(65), y(65)
i = 1
x = x0: y = y0: n(1) = 8 * (x0 - 1) + y0: y(1) = y0: GOTO 46 'изображение
'начального положения
0 a = x: b = y
1 x = x + 1: y = y + 2: l = 1
IF (x > 0 AND x < 9) AND (y > 0 AND y < 9) THEN 9
o(1) = 0
x = a: y = b
2 x = x + 1: y = y - 2: l = 2
IF (x > 0 AND x < 9) AND (y > 0 AND y < 9) THEN 9
o(2) = 0
x = a: y = b
3 x = x - 1: y = y + 2: l = 3
IF (x > 0 AND x < 9) AND (y > 0 AND y < 9) THEN 9
o(3) = 0
x = a: y = b
4 x = x - 1: y = y - 2: l = 4
IF (x > 0 AND x < 9) AND (y > 0 AND y < 9) THEN 9
o(4) = 0
x = a: y = b
5 x = x + 2: y = y + 1: l = 5
IF (x > 0 AND x < 9) AND (y > 0 AND y < 9) THEN 9
o(5) = 0
x = a: y = b
6 x = x + 2: y = y - 1: l = 6
IF (x > 0 AND x < 9) AND (y > 0 AND y < 9) THEN 9
o(6) = 0
x = a: y = b
7 x = x - 2: y = y + 1: l = 7
IF (x > 0 AND x < 9) AND (y > 0 AND y < 9) THEN 9
o(7) = 0
x = a: y = b
8 x = x - 2: y = y - 1: l = 8
n = 8 * (x - 1) + y
IF (x > 0 AND x < 9) AND (y > 0 AND y < 9) THEN 9
o(8) = 0
x = a: y = b
9 n = 8 * (x - 1) + y
r = 1: h = 0
FOR r = 1 TO i
h = n - n(r)
IF INKEY$ = CHR$(27) THEN END
IF h = 0 THEN x = a: y = b: GOTO 104
NEXT
GOTO 201
12 FOR z = 1 TO 8
IF o(z) = 0 THEN o(z) = 9
NEXT
LOCATE (1), (1)
COLOR 7
rv = RND(1)
FOR l = 1 TO 8
h = o(1) - o(l)
IF h > 0 THEN 32
IF h = 0 AND rv < .5 THEN min = l
IF h = 0 AND rv > .5 THEN min = 1
NEXT
GOTO 39
32 FOR l = 1 TO 8
h = o(2) - o(l)
IF h > 0 THEN 33
NEXT
min = 2
GOTO 39
33 FOR l = 1 TO 8
h = o(3) - o(l)
IF h > 0 THEN 34
NEXT
min = 3
GOTO 39
34 FOR l = 1 TO 8
h = o(4) - o(l)
IF h > 0 THEN 35
NEXT
min = 4
GOTO 39
35 FOR l = 1 TO 8
h = o(5) - o(l)
IF h > 0 THEN 36
NEXT
min = 5
GOTO 39
36 FOR l = 1 TO 8
h = o(6) - o(l)
IF h > 0 THEN 37
NEXT
min = 6
GOTO 39
37 FOR l = 1 TO 8
h = o(7) - o(l)
IF h > 0 THEN 38
NEXT
min = 7
GOTO 39
38 FOR l = 1 TO 8
h = o(8) - o(l)
IF h > 0 THEN 39
NEXT
min = 8
39 IF min = 1 THEN x = x + 1: y = y + 2
IF min = 2 THEN x = x + 1: y = y - 2
IF min = 3 THEN x = x - 1: y = y + 2
IF min = 4 THEN x = x - 1: y = y - 2
IF min = 5 THEN x = x + 2: y = y + 1
IF min = 6 THEN x = x + 2: y = y - 1
IF min = 7 THEN x = x - 2: y = y + 1
IF min = 8 THEN x = x - 2: y = y - 1
i = i + 1
n(i) = 8 * (x - 1) + y
y(i) = n(i) - 8 * (x - 1)
IF x = 1 THEN x$(i) = "a"
IF x = 2 THEN x$(i) = "b"
IF x = 3 THEN x$(i) = "c"
IF x = 4 THEN x$(i) = "d"
IF x = 5 THEN x$(i) = "e"
IF x = 6 THEN x$(i) = "f"
IF x = 7 THEN x$(i) = "g"
IF x = 8 THEN x$(i) = "h"
xg = 85 + 40 * k * x
yg = 450 - 40 * k * y
ag = 85 + 40 * k * a
bg = 450 - 40 * k * b
CIRCLE (xg, yg), 10, 5
PAINT (xg, yg), 5
COLOR 5
LINE (ag, bg)-(xg, yg)
COLOR 8
x1g = xg: y1g = yg
PRINT i - 1; ":"; x$(i - 1); y(i - 1); "-"; x$(i); y(i)
FOR l = 1 TO 8
o(l) = 0
NEXT
IF i = 63 THEN SLEEP 2: GOTO 201
SLEEP 1
GOTO 0
'-------------------------------------------------------------------
201 u = x + 1: v = y + 2
IF u > 8 OR u < 1 OR v > 8 OR v < 1 THEN 202
z(1) = 8 * (u - 1) + v
j = 1: h = 0
FOR j = 1 TO i
h = z(1) - n(j)
IF h = 0 THEN 202
NEXT
o(l) = o(l) + 1
IF i = 63 THEN 45
202 u = x + 1: v = y - 2
IF u > 8 OR u < 1 OR v > 8 OR v < 1 THEN 203
z(1) = 8 * (u - 1) + v
j = 1: h = 0
FOR j = 1 TO i
h = z(1) - n(j)
IF h = 0 THEN 203
NEXT
o(l) = o(l) + 1
IF i = 63 THEN 45
203 u = x - 1: v = y + 2
IF u > 8 OR u < 1 OR v > 8 OR v < 1 THEN 204
z(1) = 8 * (u - 1) + v
j = 1: h = 0
FOR j = 1 TO i
h = z(1) - n(j)
IF h = 0 THEN 204
NEXT
o(l) = o(l) + 1
IF i = 63 THEN 45
204 u = x - 1: v = y - 2
IF u > 8 OR u < 1 OR v > 8 OR v < 1 THEN 205
z(1) = 8 * (u - 1) + v
j = 1: h = 0
FOR j = 1 TO i
h = z(1) - n(j)
IF h = 0 THEN 205
NEXT
o(l) = o(l) + 1
IF i = 63 THEN 45
205 u = x + 2: v = y + 1
IF u > 8 OR u < 1 OR v > 8 OR v < 1 THEN 206
z(1) = 8 * (u - 1) + v
j = 1: h = 0
FOR j = 1 TO i
h = z(1) - n(j)
IF h = 0 THEN 206
NEXT
o(l) = o(l) + 1
IF i = 63 THEN 45
206 u = x + 2: v = y - 1
IF u > 8 OR u < 1 OR v > 8 OR v < 1 THEN 207
z(1) = 8 * (u - 1) + v
j = 1: h = 0
FOR j = 1 TO i
h = z(1) - n(j)
IF h = 0 THEN 207
NEXT
o(l) = o(l) + 1
IF i = 63 THEN 45
207 u = x - 2: v = y + 1
IF u > 8 OR u < 1 OR v > 8 OR v < 1 THEN 208
z(1) = 8 * (u - 1) + v
j = 1: h = 0
FOR j = 1 TO i
h = z(1) - n(j)
IF h = 0 THEN 208
NEXT
o(l) = o(l) + 1
IF i = 63 THEN 45
208 u = x - 2: v = y - 1
IF u > 8 OR u < 1 OR v > 8 OR v < 1 THEN 103
z(1) = 8 * (u - 1) + v
j = 1: h = 0
FOR j = 1 TO i
h = z(1) - n(j)
IF h = 0 THEN 103
NEXT
o(l) = o(l) + 1
IF i = 63 THEN 45
103 l = l + 1
x = a: y = b
IF l = 9 THEN 12
105 IF l = 1 THEN 1
IF l = 2 THEN 2
IF l = 3 THEN 3
IF l = 4 THEN 4
IF l = 5 THEN 5
IF l = 6 THEN 6
IF l = 7 THEN 7
IF l = 8 THEN 8
IF l = 9 THEN 12
104 l = l + 1
GOTO 105
45 x = u: y = v
i = i + 1
n(i) = 8 * (x - 1) + y
46 y(i) = n(i) - 8 * (x - 1)
IF x = 1 THEN x$(i) = "a"
IF x = 2 THEN x$(i) = "b"
IF x = 3 THEN x$(i) = "c"
IF x = 4 THEN x$(i) = "d"
IF x = 5 THEN x$(i) = "e"
IF x = 6 THEN x$(i) = "f"
IF x = 7 THEN x$(i) = "g"
IF x = 8 THEN x$(i) = "h"
xg = 85 + 40 * k * x
yg = 450 - 40 * k * y
CIRCLE (xg, yg), 10, 5
PAINT (xg, yg), 5
IF i > 1 THEN COLOR 5: LINE (x1g, y1g)-(xg, yg)
COLOR 7
PRINT i - 1; ":"; x$(i - 1); y(i - 1); "-"; x$(i); y(i)
IF i = 1 THEN 0
SLEEP
150 FOR j = 1 TO 64
PRINT j; x$(j); y(j);
NEXT
FOR j = 1 TO 64
PRINT #1, j; x$(j); y(j);
IF j/9 = INT(j/9) THEN PRINT #1," "
NEXT
END
SUB doska
k = 1.2
SCREEN 12
LINE (0, 0)-(640, 480), 15, BF
COLOR 6
'запись используемых символов
LOCATE (1), (5): PRINT "A"
DIM a%(100)
GET (32, 0)-(38, 15), a%
LOCATE (1), (5): PRINT "B"
DIM b%(100)
GET (32, 0)-(38, 15), b%
LOCATE (1), (5): PRINT "C"
DIM c%(100)
GET (32, 0)-(38, 15), c%
LOCATE (1), (5): PRINT "D"
DIM d%(100)
GET (32, 0)-(38, 15), d%
LOCATE (1), (5): PRINT "E"
DIM e%(100)
GET (32, 0)-(38, 15), e%
LOCATE (1), (5): PRINT "F"
DIM f%(100)
GET (32, 0)-(38, 15), f%
LOCATE (1), (5): PRINT "G"
DIM g%(100)
GET (32, 0)-(38, 15), g%
LOCATE (1), (5): PRINT "H"
DIM h%(100)
GET (32, 0)-(38, 15), h%
LOCATE (1), (5): PRINT "1"
DIM o%(100)
GET (32, 0)-(38, 15), o%
LOCATE (1), (5): PRINT "2"
DIM dv%(100)
GET (32, 0)-(38, 15), dv%
LOCATE (1), (5): PRINT "3"
DIM t%(100)
GET (32, 0)-(38, 15), t%
LOCATE (1), (5): PRINT "4"
DIM ch%(100)
GET (32, 0)-(38, 15), ch%
LOCATE (1), (5): PRINT "5"
DIM p%(100)
GET (32, 0)-(38, 15), p%
LOCATE (1), (5): PRINT "6"
DIM sh%(100)
GET (32, 0)-(38, 15), sh%
LOCATE (1), (5): PRINT "7"
DIM s%(100)
GET (32, 0)-(38, 15), s%
LOCATE (1), (5): PRINT "8"
DIM v%(100)
GET (32, 0)-(38, 15), v%
LOCATE (1), (5): PRINT "+"
DIM pl%(100)
GET (32, 0)-(38, 15), pl%
LOCATE (1), (5): PRINT "-"
DIM mn%(100)
GET (32, 0)-(38, 15), mn%
CLS
'рисование шахматной доски
PAINT (30, 30), 15
LINE (1, 1)-(639, 479), 15, B 'рамка
COLOR 8
FOR n = -4 TO 4
LINE (300 - 160 * k, 230 + k * 40 * n)-(300 + 160 * k, 230 + k * 40 * n)'горизонтали
NEXT
FOR n = -4 TO 4
LINE (300 + 40 * n * k, 230 - 160 * k)-(300 + 40 * n * k, 230 + 160 * k)'вертикали
NEXT
FOR i = 0 TO 3
FOR j = 0 TO 3
x = 300 - 140 * k + 80 * i * k
y = 230 + 140 * k - 80 * j * k
PAINT (x, y), 8
NEXT
NEXT
FOR i = 0 TO 3
FOR j = 0 TO 3
x = 300 - 100 * k + 80 * i * k
y = 230 + 100 * k - 80 * j * k
PAINT (x, y), 8
NEXT
NEXT
PUT (300 - 140 * k, 230 + 160 * k), a%
PUT (300 - 100 * k, 230 + 160 * k), b%
PUT (300 - 60 * k, 230 + 160 * k), c%
PUT (300 - 20 * k, 230 + 160 * k), d%
PUT (300 + 20 * k, 230 + 160 * k), e%
PUT (300 + 60 * k, 230 + 160 * k), f%
PUT (300 + 100 * k, 230 + 160 * k), g%
PUT (300 + 140 * k, 230 + 160 * k), h%
PUT (300 - 170 * k, 230 + 135 * k), o%
PUT (300 - 170 * k, 230 + 95 * k), dv%
PUT (300 - 170 * k, 230 + 55 * k), t%
PUT (300 - 170 * k, 230 + 15 * k), ch%
PUT (300 - 170 * k, 230 - 25 * k), p%
PUT (300 - 170 * k, 230 - 65 * k), sh%
PUT (300 - 170 * k, 230 - 105 * k), s%
PUT (300 - 170 * k, 230 - 145 * k), v%
END SUB
Вот один из путей,найденный программой.
1 a 1 2 c 2 3 e 1 4 g 2 5 h 4 6 g 6 7 h 8 8 f 7 9 h 6
10 g 8 11 e 7 12 c 8 13 a 7 14 b 5
15 a 3 16 b 1 17 d 2 18 f 1 19 h 2 20 g 4 21 e 3 22 d 1
23 b 2 24 a 4 25 c 3 26 a 2 27 c 1
28 b 3 29 a 5 30 c 4 31 b 6 32 a 8 33 c 7 34 d 5 35 b 4
36 a 6 37 b 8 38 c 6 39 d 8 40 b 7
41 d6 42 e 8 43 g 7 44 f 5 45 d 4 46 e 2 47 g 1 48 f 3
49 e 5 50 d 7 51 f 8 52 h 7 53 f 6 54 h 5
55 g 3 56 h 1 57 f 2 58 e 4 59 g 5 60 h 3 61 f 4 62 e 6
63 c 5 64 d 3
Конечно этот алгоритм применим и к доскам других размерностей.Данная программа предназначена для квадратных досок произвольной размерности.Дополнительные столбцы обозначаются i,j,k,l,m,n ...
Визуализация здесь не предусмотрена.
RANDOMIZE TIMER
OPEN "Varneksn" FOR APPEND AS #1
CLS
INPUT "размер доски:d= "; d
INPUT " x0="; x0
INPUT " y0="; y0
CLS
'l-счет основных ходов
' o(l)-счет возможных ходов для данного хода
mas = d ^ 2 + 1
DIM n(mas), x$(mas), y(mas)
p = d ^ 2 - 1
i = 1
x = x0: y = y0: n(1) = d * (x0 - 1) + y0: y(1) = y0: GOTO 46
0 a = x: b = y
'генерация ходов
1 x = x + 1: y = y + 2: l = 1
IF (x > 0 AND x < d + 1) AND (y > 0 AND y < d + 1) THEN 9'проверка не выходит ли
o(1) = 0 'ход за доску
x = a: y = b
2 x = x + 1: y = y - 2: l = 2
IF (x > 0 AND x < d + 1) AND (y > 0 AND y < d + 1) THEN 9
o(2) = 0
x = a: y = b
3 x = x - 1: y = y + 2: l = 3
IF (x > 0 AND x < d + 1) AND (y > 0 AND y < d + 1) THEN 9
o(3) = 0
x = a: y = b
4 x = x - 1: y = y - 2: l = 4
IF (x > 0 AND x < d + 1) AND (y > 0 AND y < d + 1) THEN 9
o(4) = 0
x = a: y = b
5 x = x + 2: y = y + 1: l = 5
IF (x > 0 AND x < d + 1) AND (y > 0 AND y < d + 1) THEN 9
o(5) = 0
x = a: y = b
6 x = x + 2: y = y - 1: l = 6
IF (x > 0 AND x < d + 1) AND (y > 0 AND y < d + 1) THEN 9
o(6) = 0
x = a: y = b
7 x = x - 2: y = y + 1: l = 7
IF (x > 0 AND x < d + 1) AND (y > 0 AND y < d + 1) THEN 9
o(7) = 0
x = a: y = b
8 x = x - 2: y = y - 1: l = 8
n = d * (x - 1) + y
IF (x > 0 AND x < d + 1) AND (y > 0 AND y < d + 1) THEN 9
o(8) = 0
x = a: y = b
9 n = d * (x - 1) + y 'когда ход не выходит за доску,
r = 1: h = 0 ' проверка не занята ли данное поле
FOR r = 1 TO i
h = n - n(r)
IF h = 0 THEN x = a: y = b: GOTO 104'если занято,то перейти к следующему ходу
NEXT
GOTO 201 'если ход возможен,то перейти к пересчету ходов с данного поля
'----------------------------------------
'Блок выбора хода
12 FOR z = 1 TO 8
IF o(z) = 0 THEN o(z) = 9 'присвоение нулевому числу ходов значения 9
NEXT 'т.к. иначе минимальное значение было бы 0
LOCATE (1), (1)
' анализ возможных ходов на минимальное количество ходов после них
rv = RND(1)
FOR l = 1 TO 8
h = o(1) - o(l)
IF h > 0 THEN 32 'число ходов не минимально
IF h = 0 AND rv <= .5 THEN min = l ' организация выбора при равенстве
IF h = 0 AND rv > .5 THEN min = 1 'возможных ходов (здесь одно разветвле-
NEXT 'ние,но можно сделать и больше)
GOTO 39
32 FOR l = 1 TO 8
h = o(2) - o(l)
IF h > 0 THEN 33
NEXT
min = 2
GOTO 39
33 FOR l = 1 TO 8
h = o(3) - o(l)
IF h > 0 THEN 34
NEXT
min = 3
GOTO 39
34 FOR l = 1 TO 8
h = o(4) - o(l)
IF h > 0 THEN 35
NEXT
min = 4
GOTO 39
35 FOR l = 1 TO 8
h = o(5) - o(l)
IF h > 0 THEN 36
NEXT
min = 5
GOTO 39
36 FOR l = 1 TO 8
h = o(6) - o(l)
IF h > 0 THEN 37
NEXT
min = 6
GOTO 39
37 FOR l = 1 TO 8
h = o(7) - o(l)
IF h > 0 THEN 38
NEXT
min = 7
GOTO 39
38 FOR l = 1 TO 8
h = o(8) - o(l)
IF h > 0 THEN 39
NEXT
min = 8
39 IF min = 1 THEN x = x + 1: y = y + 2
IF min = 2 THEN x = x + 1: y = y - 2
IF min = 3 THEN x = x - 1: y = y + 2
IF min = 4 THEN x = x - 1: y = y - 2
IF min = 5 THEN x = x + 2: y = y + 1
IF min = 6 THEN x = x + 2: y = y - 1
IF min = 7 THEN x = x - 2: y = y + 1
IF min = 8 THEN x = x - 2: y = y - 1
i = i + 1
n(i) = d * (x - 1) + y
y(i) = n(i) - d * (x - 1)
IF x = 1 THEN x$(i) = "a"
IF x = 2 THEN x$(i) = "b"
IF x = 3 THEN x$(i) = "c"
IF x = 4 THEN x$(i) = "d"
IF x = 5 THEN x$(i) = "e"
IF x = 6 THEN x$(i) = "f"
IF x = 7 THEN x$(i) = "g"
IF x = 8 THEN x$(i) = "h"
IF x = 9 THEN x$(i) = "i"
IF x = 10 THEN x$(i) = "j"
IF x = 11 THEN x$(i) = "k"
IF x = 12 THEN x$(i) = "l"
IF x = 13 THEN x$(i) = "m"
IF x = 14 THEN x$(i) = "n"
IF x = 15 THEN x$(i) = "o"
'...
PRINT i - 1; ":"; x$(i - 1); y(i - 1); "-"; x$(i); y(i)
FOR l = 1 TO 8
o(l) = 0
NEXT
IF i = p THEN SLEEP 1: GOTO 201
GOTO 0
'-------------------------------------------------------------------
'начало блока подсчета чиcла ходов после хода l
201 u = x + 1: v = y + 2 ' аналогично проверке основного хода
IF u > d OR u < 1 OR v > d OR v < 1 THEN 202
z(1) = INT(d * (u - 1)) + v
j = 1: h = 0
FOR j = 1 TO i
h = z(1) - n(j)
IF h = 0 THEN 202
NEXT
o(l) = o(l) + 1 'cчет ходов
IF i = p THEN 45'еcли остался последний ход идти на 45
202 u = x + 1: v = y - 2
IF u > d OR u < 1 OR v > d OR v < 1 THEN 203
z(1) = INT(d * (u - 1)) + v
j = 1: h = 0
FOR j = 1 TO i
h = z(1) - n(j)
IF h = 0 THEN 203
NEXT
o(l) = o(l) + 1
IF i = p THEN 45
203 u = x - 1: v = y + 2
IF u > d OR u < 1 OR v > d OR v < 1 THEN 204
z(1) = d * (u - 1) + v
j = 1: h = 0
FOR j = 1 TO i
h = z(1) - n(j)
IF h = 0 THEN 204
NEXT
o(l) = o(l) + 1
IF i = p THEN 45
204 u = x - 1: v = y - 2
IF u > d OR u < 1 OR v > d OR v < 1 THEN 205
z(1) = INT(d * (u - 1)) + v
j = 1: h = 0
FOR j = 1 TO i
h = z(1) - n(j)
IF h = 0 THEN 205
NEXT
o(l) = o(l) + 1
IF i = p THEN 45
205 u = x + 2: v = y + 1
IF u > d OR u < 1 OR v > d OR v < 1 THEN 206
z(1) = INT(d * (u - 1)) + v
j = 1: h = 0
FOR j = 1 TO i
h = z(1) - n(j)
IF h = 0 THEN 206
NEXT
o(l) = o(l) + 1
IF i = p THEN 45
206 u = x + 2: v = y - 1
IF u > d OR u < 1 OR v > d OR v < 1 THEN 207
z(1) = d * (u - 1) + v
j = 1: h = 0
FOR j = 1 TO i
h = z(1) - n(j)
IF h = 0 THEN 207
NEXT
o(l) = o(l) + 1
IF i = p THEN 45
207 u = x - 2: v = y + 1
IF u > d OR u < 1 OR v > d OR v < 1 THEN 208
z(1) = d * (u - 1) + v
j = 1: h = 0
FOR j = 1 TO i
h = z(1) - n(j)
IF h = 0 THEN 208
NEXT
o(l) = o(l) + 1
IF i = p THEN 45
208 u = x - 2: v = y - 1
IF u > d OR u < 1 OR v > d OR v < 1 THEN 103 'если с данного поля нет ходов,
z(1) = INT(d * (u - 1)) + v
j = 1: h = 0
FOR j = 1 TO i
h = z(1) - n(j)
IF h = 0 THEN 103
NEXT
o(l) = o(l) + 1
IF i = p THEN 45
103 l = l + 1 'переход к следующему ходу
x = a: y = b
IF l = 9 THEN 12
105 IF l = 1 THEN 1 'отправка на вычисление следующего хода
IF l = 2 THEN 2
IF l = 3 THEN 3
IF l = 4 THEN 4
IF l = 5 THEN 5
IF l = 6 THEN 6
IF l = 7 THEN 7
IF l = 8 THEN 8
IF l = 9 THEN 12
104 l = l + 1 'если клетка занята,то переход к следующему ходу
GOTO 105
45 x = u: y = v 'блок записи хода
i = i + 1
n(i) = d * (x - 1) + y
46 y(i) = n(i) - d * (x - 1)
IF x = 1 THEN x$(i) = "a"
IF x = 2 THEN x$(i) = "b"
IF x = 3 THEN x$(i) = "c"
IF x = 4 THEN x$(i) = "d"
IF x = 5 THEN x$(i) = "e"
IF x = 6 THEN x$(i) = "f"
IF x = 7 THEN x$(i) = "g"
IF x = 8 THEN x$(i) = "h"
IF x = 9 THEN x$(i) = "i"
IF x = 10 THEN x$(i) = "j"
IF x = 11 THEN x$(i) = "k"
IF x = 12 THEN x$(i) = "l"
IF x = 13 THEN x$(i) = "m"
IF x = 14 THEN x$(i) = "n"
IF x = 15 THEN x$(i) = "o"
PRINT i - 1; ":"; x$(i - 1); y(i - 1); "-"; x$(i); y(i)
IF i = 1 THEN 0
150 FOR j = 1 TO d ^ 2
PRINT j; x$(j); y(j);
IF j / 9 = INT(j / 9) THEN PRINT " "
NEXT
FOR j = 1 TO d ^ 2
PRINT #1, j; x$(j); y(j);
IF j / 9 = INT(j / 9) THEN PRINT #1, " "
NEXT
PRINT #1, " "
PRINT #1, " "
END
Очевидно,что для досок нечётной размерности,обход возможен только если начальное поле чёрное.(a1 всегда полагается чёрной клеткой)
Результаты работы программы для досок размерностью от 5*5 до 12*12 приведены ниже (для досок 3*3 и 4*4 обход невозможен):
1 a 1 2 b 3 3 a 5 4 c 4 5 e 5 6 d 3 7 e 1 8 c 2 9 a 3
10 b 5 11 d 4 12 e 2 13 c 1 14 a 2 15 b 4 16 d 5 17 e 3 18 d 1
19 b 2 20 a 4 21 c 5 22 e 4 23 d 2 24 b 1 25 c3
1 a 1 2 b 3 3 a 5 4 c 6 5 e 5 6 f 3 7 e 1 8 c 2 9 a 3
10 b 1 11 d 2 12 f 1 13 e 3 14 f 5 15 d 6 16 c 4 17 b 6 18 a 4
19 b 2 20 d 1 21 f 2 22 e 4 23 f 6 24 d 5 25 c 3 26 b 5 27 d 4
28 e 2 29 c 1 30 a 2 31 b 4 32 a 6 33 c 5 34 d 3 35 f 4 36 e 6
1 a1 2 c2 3 e1 4 g2 5 f4 6 g6 7 e7 8 f5 9 g7
10 e6 11 g5 12 f7 13 d6 14 b7 15 a5 16 b3 17 c1 18 a2
19 b4 20 a6 21 c7 22 d5 23 f6 24 g4 25 f2 26 d3 27 c5
28 d7 29 b6 30 a4 31 b2 32 d1 33 e3 34 f1 35 g3 36 e4
37 d2 38 c4 39 e5 40 f3 41 g1 42 e2 43 d4 44 c6 45 a7
46 b5 47 c3 48 b1 49 a3
1 a1 2 b3 3 c1 4 a2 5 b4 6 a6 7 b8 8 d7 9 f8
10 h7 11 g5 12 h3 13 g1 14 e2 15 g3 16 h1 17 f2 18 d1
19 b2 20 a4 21 b6 22 a8 23 c7 24 e8 25 g7 26 h5 27 f6
28 g8 29 h6 30 g4 31 h2 32 f1 33 d2 34 b1 35 a3 36 c2
37 e1 38 g2 39 e3 40 d5 41 c3 42 e4 43 c5 44 d3 45 f4
46 e6 47 d8 48 b7 49 a5 50 c4 51 d6 52 c8 53 a7 54 b5
55 d4 56 c6 57 e7 58 f5 59 h4 60 f3 61 e5 62 g6 63 h8
64 f7
1 a1 2 b3 3 c1 4 a2 5 b4 6 a6 7 b8 8 d9 9 f8
10 h9 11 i7 12 h5 13 i3 14 h1 15 f2 16 d1 17 b2 18 a4
19 b6 20 a8 21 c9 22 d7 23 e9 24 g8 25 i9 26 h7 27 i5
28 h3 29 i1 30 g2 31 e1 32 d3 33 c5 34 b7 35 a9 36 c8
37 a7 38 b9 39 c7 40 b5 41 a3 42 b1 43 c3 44 d5 45 f6
46 e8 47 g9 48 i8 49 h6 50 i4 51 h2 52 g4 53 e3 54 c2
55 d4 56 e2 57 g1 58 i2 59 g3 60 f1 61 d2 62 e4 63 d6
64 c4 65 a5 66 c6 67 d8 68 e6 69 f4 70 g6 71 e7 72 f5
73 h4 74 f3 75 e5 76 f7 77 g5 78 i6 79 h8 80 f9 81 g7
1 a1 2 c2 3 e1 4 g2 5 i1 6 j3 7 i5 8 j7 9 i9
10 g10 11 e9 12 c10 13 a9 14 b7 15 a5 16 b3 17 c1 18 a2
19 b4 20 a6 21 b8 22 a10 23 c9 24 e10 25 d8 26 b9 27 a7
28 c6 29 d4 30 e2 31 g1 32 i2 33 j4 34 h3 35 j2 36 h1
37 i3 38 j1 39 h2 40 f1 41 d2 42 b1 43 a3 44 b5 45 c3
46 d1 47 f2 48 g4 49 e3 50 c4 51 b2 52 a4 53 c5 54 d3
55 f4 56 e6 57 c7 58 a8 59 b10 60 d9 61 f10 62 g8 63 h10
64 j9 65 i7 66 j5 67 h6 68 i4 69 g3 70 h5 71 j6 72 i8
73 j10 74 h9 75 j8 76 i10 77 g9 78 h7 79 f8 80 d7 81 b6
82 d5 83 f6 84 e4 85 g5 86 f3 87 e5 88 f7 89 h8 90 i6
91 h4 92 g6 93 e7 94 c8 95 d10 96 f9 97 g7 98 f5 99 d6
100 e8
1 a1 2 c2 3 e1 4 g2 5 i1 6 k2 7 j4 8 k6 9 j8
10 k10 11 i11 12 j9 13 k11 14 i10 15 k9 16 j11 17 h10 18 f11
19 d10 20 b11 21 a9 22 b7 23 a5 24 b3 25 c1 26 a2 27 b4
28 a6 29 c5 30 a4 31 b2 32 d3 33 f2 34 d1 35 e3 36 f1
37 d2 38 b1 39 a3 40 c4 41 b6 42 a8 43 b10 44 d11 45 c9
46 a10 47 c11 48 b9 49 a11 50 c10 51 b8 52 d7 53 e9 54 c8
55 a7 56 b5 57 c3 58 e2 59 g1 60 h3 61 j2 62 h1 63 g3
64 i2 65 k1 66 j3 67 k5 68 j7 69 i5 70 k4 71 i3 72 j1
73 k3 74 j5 75 k7 76 i6 77 h4 78 f3 79 h2 80 i4 81 g5
82 e4 83 d6 84 f5 85 d4 86 c6 87 e5 88 g4 89 h6 90 f7
91 h8 92 g10 93 e11 94 f9 95 g11 96 e10 97 d8 98 e6 99 f4
100 d5 101 c7 102 d9 103 e7 104 g6 105 f8 106 h9 107 i7 108 h5
109 g7 110 i8 111 j10 112 k8 113 j6 114 h7 115 f6 116 e8 117 g9
118 h11 119 i9 120 g8 121 f10
1 a1 2 c2 3 e1 4 g2 5 i1 6 k2 7 l4 8 k6 9 l8
10 k10 11 l12 12 j11 13 l10 14 k12 15 i11 16 g12 17 e11 18 c12
19 a11 20 b9 21 a7 22 b5 23 a3 24 b1 25 d2 26 f1 27 e3
28 d1 29 b2 30 a4 31 c3 32 a2 33 c1 34 b3 35 a5 36 c4
37 b6 38 a8 39 b10 40 a12 41 c11 42 e12 43 d10 44 b11 45 a9
46 c8 47 d6 48 b7 49 c5 50 a6 51 b4 52 d3 53 f2 54 e4
55 g3 56 h1 57 j2 58 l1 59 k3 60 j1 61 l2 62 k4 63 l6
64 k8 65 i9 66 j7 67 k9 68 l11 69 j12 70 h11 71 f12 72 g10
73 h12 74 f11 75 d12 76 c10 77 b12 78 a10 79 b8 80 c6 81 d8
82 e10 83 c9 84 d11 85 e9 86 d7 87 e5 88 f7 89 g9 90 i10
91 k11 92 l9 93 j10 94 i12 95 g11 96 f9 97 h10 98 j9 99 h8
100 g6 101 f8 102 d9 103 e7 104 d5 105 c7 106 e8 107 f10 108 g8
109 f6 110 g4 111 i3 112 j5 113 i7 114 h9 115 j8 116 l7 117 k5
118 l3 119 k1 120 j3 121 i5 122 h7 123 j6 124 l5 125 k7 126 i8
127 h6 128 i4 129 h2 130 f3 131 g5 132 h3 133 g1 134 i2 135 j4
136 i6 137 h4 138 f5 139 g7 140 h5 141 f4 142 e6 143 d4 144 e2