Другой старинной шахматной задачей является задача об обходе доски конём,чтобы на каждом поле конь побывал только один раз.Здесь предлагается программа реализующая правило Варнсдорфа – конь ходит на поле с которого у него будет меньше всего ходов. Если таких ходов несколько,выбирается любой. Этот алгоритм реализуется не в 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 

 

 

 

Конструктор сайтов - uCoz