Тур шахмотного коня

Автор работы: Пользователь скрыл имя, 08 Декабря 2010 в 12:35, курсовая работа

Краткое описание

Класс алгоритмов, позволяющий решать подобные задачи, в англоязычной литературе называется «backtracking algorithms» («алгоритмы с возвратом»). Такие алгоритмы применяются в тех случаях, когда не подходят более «направленные» методы [3].

Исследуем одну из наиболее известных задач этого класса – задачу о ходе коня [3-5]. Она состоит в том, чтобы найти обход доски размером N на M конем, перемещающимся по правилам шахматной игры. Если такой обход существует, то каждое поле посещается только один раз (выполняется N*M-1 шагов). Проанализируем методы оптимизации и исследуем работу итеративной, рекурсивной и автоматной программ.

Содержание работы

Введение……………………………………………………………..3

1.Методы оптимизации……………………………………………...4

2.Определение клеток, обход из которых невозможен………4

3.Выявление заблокированных клеток………………………..5

4.Применение правила Варнсдорфа…………………………....5

5.Использование различных массивов хода коня……………6
2.Итеративная программа…………………………………………..7

3.Полный перебор………………………………………………...7

4.Результаты работы программы с оптимизацией…………..9
3.Рекурсивная программа…………………………………………14
4.Автоматная программа………………………………………….15
Заключение……………………………………………………….17

Список Использованной литературы………………………...18

Содержимое работы - 1 файл

Тур шахмотного коня.doc

— 137.50 Кб (Скачать файл)
 

    Для некоторых клеток программа работает чрезвычайно медленно уже при  небольших размерах доски. Например, для доски 6*6 при старте из клетки (5,2) поиск пути требует более 290 возвратов. 
 
 
 
 
 

    2.2. Результаты работы программы с оптимизацией. 

    Из  работы [5] известно, что для досок  размером N*M и M*N:

  • Не существует ни одного обхода при N,M < 3; N = 3, M = 5,6; N = M = 4;
  • Имеется как минимум одна клетка, из которой возможен обход доски при N = 3, M = 4; N = 3, M >= 7; N >= 4, M >= 5.

    Переходя  к изложению полученных результатов  отметим, что они относятся к  перечисленным выше методам оптимизации  и эвристически выбранным массивам вариантов для хода коня. При применении других методов оптимизации [5] и иных массивов получаемые результаты могут различаться.

    Рассмотрим  результаты обхода некоторых досок. Для них приводятся таблицы, в  которых указывается количество возвратов, выполненное при нахождении обхода из соответствующей клетки. При отсутствии обхода в клетке указывается  символ «N». В случае, если количество возвратов превысило задаваемую в программе величину (MAX_RET = 400000), поиск пути прекращается, а в соответствующей клетке выводится сокращение «LIM». В таблицах, построенных для метода оптимизации, использующего различные массивы вариантов хода коня, в клетке дополнительно указывается обозначение массива (от ‘A’ до ‘E’), при применении которого обход был получен без возвратов (GOOD_RET = 1). При этом, если результат был получен для первого массива, то соответствующий ему символ ‘A’ не выводится. Также в таблицах приводится один из полученных путей. 

    Результаты, полученные для доски размером 5 на 5, приведены в табл. 2. 
 
 

     

    Таблица 2. Результаты работы программы для  доски 5 на 5

    Оптимизации 1

    33951    N            212310     N               4543

    N           52061     N              123374      N

    69216    N            23411       N               32116

    N           214142  N              LIM           N

    1300       N           325867     N               30565

    Оптимизации 1 – 3

    0            N            127        N               0

    N           0             N           0                N

    127        N            0            N               0

    N           0             N           0                N

    0            N            127        N               0                  

    Оптимизации 1 и 2

    950         N           4676        N                256

    N            1596      N             3057           N

    2102       N           629          N               1417

    N            4296      N             7463           N

    94           N           4426        N                381

    Оптимизация 1 – 4

    0            N         B0           N                 0

    N           0            N           0                 N

    B0         N           0            N                 0

    N            0           N           0                 N

    0            N         D0           N                0

    Оптимизации 1 и 3

    0             N           1709        N               0

    N            0             N            0                N

    1709       N            0             N               0

    N            0             N            0                N

    0             N            1709       N               0

    Путь  из (5,5), возвратов 0:

     5          14          19          24                3

    20          9             4         13               18

    15          6           23            2               25

    10         21            8          17               12

     7          16           11         22                 1

 

    Результаты, полученные для доски размером 7 на 7, приведены в табл. 3. 

    Таблица 3. Результаты работы программы для  доски 7 на 7

    Оптимизации 1

     29032     N               LIM          N

    LIM       N               LIM 

      N             LIM         N              LIM

    N            172170     N

      19396     N               19396       N

    LIM        N              LIM  

      N             29032       N              LIM

    N            LIM          N

       LIM       N               39629       N

    14807     N              LIM

       N            LIM         N               LIM

    N            LIM          N

      6415       N               33488        N

    386809   N              LIM  

 
 
 
 
    Оптимизации 1 – 3

    8339   N      0          N      0      N          0

    N         0      N          0       N        0       N

    0         N      0          N        3      N          0

    N         0      N          0       N        5972  N

    0         N     14204   N         0       N         0

    N         0      N         5972   N       0         N

    0         N      0          N         0      N          0

    Оптимизации 1 и 2

     1426        N               17178        N

    293292   N               17178

      N            LIM          N

    302303   N               3353         N

      966          N              966             N

    LIM        N               133190

      N              1426         N              LIM

    N              28390       N

       70852      N              2052         N

    980         N                30757

      N             9903          N             LIM

    N              24272       N       

       491          N               681         N

    5118        N                 108858

    Оптимизации 1 – 4

    B0      N      0          N        0       N           0

    N         0      N          0       N        0         N

    0         N      0          N       B0     N           0

    N         0     N          0       N      B0         N

    0         N      D0       N        0       N          0

    N         0      N        B0       N       0          N

    0         N      0          N         0      N          0

    Оптимизации 1 и 3

    291565    N                0             N

    0              N                 0

    N              0                N              0

    N              0                N

    0              N                 0            N

    375          N                 0

    N              0                N              0

    N             LIM            N

    0              N                LIM         N

    0              N                 0

    N              0                N              LIM

    N              0                N

    0              N                 0              N

    0              N                 0

 
 
 
    Путь из (7,7), возвратов 0:

     9        6      11       40      29     4    27

    12     39        8         5      26   43    30

      7     10      35       44      41   28      3

    36     13      38       25      48   31    42

    19     16      47       34      45     2    23

    14     37      18       21      24   49    32

    17     20      15       46      33    22     1

 
 

    Для классической шахматной доски размером 8 на 8 получены следующие результаты:

  • Для оптимизаций 1 и 2 в большинстве клеток превышено предельное значение числа возвратов (MAX_RET). Минимальное количество возвратов в клетке (5, 5) – 2502;
  • Для оптимизаций 1 и 3 во всех клетках, кроме (4, 1) и (6, 4), ноль возвратов. В указанных клетках 9 и 79 возвратов, соответственно;
  • Для оптимизаций 1-3 в клетке (6, 4) три возврата. В остальных клетках ноль возвратов;
  • Для оптимизаций 1-4 во всех клетках ноль возвратов. При этом в клетке (6, 4) был использован второй массив возможных ходов.

    Для доски размером 9 на 9 для клеток, из которых существует обход, он достигает без единого возврата назад для оптимизаций 1-3 (для 1-4, естественно, тоже).

      Для доски размером 50 на 50 получены следующие результаты:

  • Для оптимизаций 1-3 в большинстве клеток ноль возвратов, а количество возвратов в остальных клетках варьируется от единиц до значений, превышающих предельное значение;
  • Для оптимизаций 1-4 во всех клетках ноль возвратов.

    Для доски размером 77 на 77, для клеток, из которых существует обход, получены следующие результаты:

  • Для оптимизаций 1-3 в большинстве клеток ноль возвратов, а количество возвратов в остальных клетках варьируется от единиц до значений, превышающих предельное значение;
  • Для оптимизаций 1-4 во всех клетках ноль возвратов.

    Для доски размером 100 на 100 получены следующие  результаты:

  • Для оптимизаций 1-3 в большинстве клеток ноль возвратов, а количество возвратов в остальных клетках варьируется от единиц до значений, превышающих предельное значение;
  • Для оптимизаций 1-4 во всех клетках, за исключением клеток (94, 24) и (94, 79), ноль возвратов.

    Как отмечено выше, рассматриваемые методы оптимизации для не квадратных досок  не столь эффективны. Результаты, полученные для доски размером 14 на 3, приведены  в табл. 4.

    Таблица 4. результаты работы программы для  доски 14 на 3

    Оптимизации 1 – 4

    B0         B0              E997      E45274        B0      E0      0      B0           D0      0     E17      E626

    0            0

    B0        E390577    E56         0                 0         C0      E16   E10378    B0     0      0

    E1006     E67      0

    B0          B0              E997      E45274      C0       B0       C0      B0           C0      B0    E17     E626

    0             0     

    Путь  из (14, 3), возвратов 0:

    20           17             14            11               26        23       32         9            30        7     36       39

    2             5

    15           12             19            22               33        10      25       28             35      40       3         6

    37           42

    18           21             16            13               24         27     34        31              8      29      38       41

    4             1

 
 
 
 
 
 
 
 
 
 
 
 
 

    3. Рекурсивная программа 

    Наиболее  известное решение для задачи обхода конем – рекурсивное [2]. При  этом структура функции, выполняющей перебор, имеет следующий вид:

    int find_path ( int cur_x, int cur_y, int move_num )

    {

        desk_state [cur_x] [cur_y] = nove_num ; //   Запомнить ход.

         if ( move_num > max_moves ) return 1 ; //  Проверим завершение обхода.

         // Проверить каждый возможный ход из текущей клетки.

         for ( int I = 0 ; I < 8 ; i++ )

        {

            int next_x = cur_x + possible_moves [i] [0] ; // Определить следующее поле.

            int next_y = cur_y + possible_moves [i] [1] 

             if (            move_possible (next_x, next_y  )

                      && find_path (next_x, next_y, move_num+1 ))  return 1 ;

        }

          // Возврат.

         desk_state [cur_x] [cur_y] = 0 ;

         back_ret++ ;

         return 0 ;

    }

    В этой программе могут быть использованы все виды оптимизаций, описанные выше. 
 
 
 
 
 
 
 
 
 
 
 
 
 

    4. Автоматная программа. 

    Если  первые две программы для решения  этой задачи вполне традиционны, то автоматные программы к таковым не относятся [2].

    Отметим, что автоматная программа может  быть формально построена по описанной  выше итеративной программы с помощью метода, изложенного в работе [7]. Автоматная программа может быть также формально построена и по приведенной рекурсивной программе с использование метода, предложенного в работе [8].

    Кроме того, можно создать автоматную программу путем непосредственного построения автомата по условиям задачи. На рис. 1, 2 для этого автомата приведены соответствующие схема связи и граф переходов автомата Мили. 
 

      

    Рис. 1. Схема связей автомата для задачи о ходе коня

    Этот  автомат использует функции и  переменные, определенные в итеративной  программе. Поэтому в автоматной программе применяются все рассмотренные  методы оптимизации, а получаемые с  ее помощью результаты совпадают с результатами работы итеративной программы. 
 
 

    

    Рис. 2. граф переходов автомата для задачи о ходе коня

    Упрощенный  текст функции, реализующей этот автомат, приведен ниже:

    void find_path_switch ( int limit )

    {

                y = 0 ; 

                do

                   switch ( y )

                  {

                       case 0 :

                            if ( x4 () )                             y = 3 ;

                            else

                           { z1_0 () ;                             y = 1 ;}

                       break ;

                       case 1:

                            if ( x1() )                              y = 4 ;

                            else

                            if ( x3() ) { z1_1()  ; }

                            else

                            if ( x2() ){ z2 () ; z1_2() ;   y = 2 ; }

                            else                                       y = 3 ;

                       break ;

                       case 2 :

                           if ( x5 (limit) )                       y = 5 ;

                           else

                                                                        y = 1 ;

                        break ;

                        case 3 :                                     y = 0 ; break ;

                        case 4 :                                    y = 0 ; break ;

                        case 5 :                                     y = 0 ; break ;

         }

    while ( y < 3 ) ;

    } 

    Заключение 

    Совместное  применение достаточно простых и известных методов оптимизации позволило резко сократить перебор, благодаря чему удается относительно быстро находить пути в досках с весьма большой размерности. Так, на компьютере, оснащенном процессором Pentium II 400 МГц, поиск обхода из каждой клетки доски размером 200 на 200 занял около 20 минут (на поиск одного обхода – около 0,03 с). При этом для большинства клеток обход выполняется без единого возврата назад. В программе, наряду с рассмотренными, могли бы использоваться и другие методы оптимизации [5]. Однако на досках очень большого размера, например 2000 на 2000 клеток, нахождение даже одного пути занимает значительное время и при применении методов оптимизации, позволяющих строить обходы без единого возврата.

Информация о работе Тур шахмотного коня