Простейший рекурсивный алгоритм с возвратом и эвристикой решения задачи о ходе коня::Журнал СА 12.2018
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Дата-центры  

Дата-центры: есть ли опасность утечки данных?

Российские компании уже несколько лет испытывают дефицит вычислительных мощностей. Рост числа проектов,

 Читать далее...

Книжная полка  

Защиты много не бывает

Среди книжных новинок издательства «БХВ» есть несколько изданий, посвященных методам социальной инженерии

 Читать далее...

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6447
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 7143
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4422
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 3095
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3892
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3910
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6396
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3242
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3539
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7378
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10735
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12454
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 14121
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9205
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7150
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5456
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4689
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3505
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3218
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3457
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3100
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Простейший рекурсивный алгоритм с возвратом и эвристикой решения задачи о ходе коня

Архив номеров / 2018 / Выпуск №12 (193) / Простейший рекурсивный алгоритм с возвратом и эвристикой решения задачи о ходе коня

Рубрика: Карьера/Образование /  Кафедра   | Дополнительные материалы

Кирилл Ткаченко КИРИЛЛ ТКАЧЕНКО, инженер 1-й категории, ФГАОУ ВО «Севастопольский государственный университет», tkachenkokirillstanislavovich@gmail.com

Простейший рекурсивный алгоритм
с возвратом и эвристикой решения задачи о ходе коня

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

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

Одной из таких задач является классическая задача о ходе коня [1], которая сводится к построению маршрута коня на шахматной доске, покрывающего все клетки доски. Для нее известны многочисленные программные реализации наПаскале [1] и подобным ему языкам, хрестоматийные программные реализации [2] и на языке 1С [3]. Для начального обучения программированию подходит школьный алгоритмический язык.

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

В целочисленных переменных N находится размер стороны шахматной доски, NN – количество клеток шахматной доски, Ndydx – наибольшее возможное число ходов из одной клетки для коня:

цел N = 8
цел NN
цел Ndydx = 8

В одномерных целочисленных массивах dy и dx хранятся приращения координаты для возможного хода коня из конкретной клетки шахматной доски:

цел таб dy[1:Ndydx]
цел таб dx[1:Ndydx]

Сама шахматная доска располагается в двумерном целочисленном массиве доска, на каждой клетке массива находится номер хода коня при посещении клетки:

цел таб доска[1:N, 1:N]

Целочисленные переменные кодСимволаA1 и лучшийВесНач хранят соответственно код символа «a» минус 1 и лучший начальный вес для эвристики:

цел кодСимволаA1
цел лучшийВесНач

Головной алгоритм выполняет инициализацию, после устанавливает на поле a1 коня:

алг SAMAG
нач
  Инициализация
  доска[1, 1] := 1;

Если из поля a1 возможно решение, то заполненная перемещениями коня шахматная доска печатается, иначе решений нет:

  если Решить(2, 1, 1)
    то
      ПечатьДоски;
    иначе
      вывод "Нет решений.", нс;
  все
кон

Алгоритм Инициализация производит установку начальных значений переменных. Целочисленные переменные у и x – счетчики циклов:

алг Инициализация
нач
  цел y, x;

В целочисленную переменную NN помещается количество клеток шахматной доски, в кодСимволаA1 – код символа «a» минус 1:

  NN := N * N;
  кодСимволаA1 := код("a") - 1;

Заполняются приращения координаты dy:

  dy[1] := 2;
  dy[2] := 1;
  dy[3] := -1;
  dy[4] := -2;
  dy[5] := -2;
  dy[6] := -1;
  dy[7] := 1;
  dy[8] := 2;

Заполняются приращения координаты dx:

  dx[1] := 1;
  dx[2] := 2;
  dx[3] := 2;
  dx[4] := 1;
  dx[5] := -1;
  dx[6] := -2;
  dx[7] := -2;
  dx[8] := -1;

Лучший начальный вес полагается равным (Ndydx+1)2:

  лучшийВесНач := (Ndydx + 1) * (Ndydx + 1);

Конь вначале не посетил ни одной клетки шахматной доски:

  нц для y от 1 до N
    нц для x от 1 до N
      доска[y, x] := 0;
    кц
  кц
кон

Алгоритм ПечатьДоски выводит на устройство вывода шахматную доску. Целочисленные переменные yx – счетчики циклов:

алг ПечатьДоски
нач
  цел y, x;

Сообщаются по каждой горизонтали соответствующие клетки шахматной доски:

  нц для y от N до 1 шаг -1
    вывод y, " ";
    нц для x от 1 до N
      вывод доска[y, x]:4;
    кц
    вывод нс;
  кц

Затем отображаются номера вертикалей:

  вывод "  ";
  нц для x от 1 до N
    вывод "   ", символ(кодСимволаA1 + x);
  кц
  вывод нс;
кон

Алгоритм МожноХодить возвращает «да», если клетка с целочисленными координатами y и x принадлежит шахматной доске и на нее конь не ходил, и «нет», в противном случае:

алг лог МожноХодить(цел y, цел x)
нач
  знач := (1 <= y) и (y <= N) и (1 <= x) и (x <= N) и (доска[y, x] = 0);
кон

Алгоритм ЛучшийХод с учетом эвристики по Варнсдорфу для расположения коня в клетке с координатами y и x возвращает номер направления перемещения, пригодного для использования в качестве индекса массивов dy и dx. Вцелочисленных переменных лучшееНапр и лучшийВес находятся найденные лучшее направление перемещения и вес для него, напрнапр2вес – номер направления перемещения, номер следующего за ним направления, вес по следующему направлению рассчитанный, nynx – новые координаты местоположения коня с учетом приращений координат:

алг цел ЛучшийХод(цел y, цел x)
нач
  цел лучшееНапр, лучшийВес;
  цел напр, напр2, вес;
  цел ny, nx;

Вначале лучшее направление перемещения неопределенно и лучшим весом направления перемещения считается наибольший возможный с запасом:

  лучшееНапр := -1;
  лучшийВес := лучшийВесНач;

По всем номерам возможных направлений перемещения коня формируется новое положение коня:

  нц для напр от 1 до Ndydx
    ny := y + dy[напр];
    nx := x + dx[напр];

Если в эту клетку шахматной доски можно ходить, то производится оценка веса этой клетки:

    если МожноХодить(ny, nx)
      то
        вес := 0;

Для этого подсчитывается количество клеток доски, в которые из рассматриваемой клетки возможен переход конем, то есть вес клетки доски:

        нц для напр2 от 1 до Ndydx
          если МожноХодить(ny + dy[напр2], nx + dx[напр2])
            то
              вес := вес + 1;
          все
        кц

Если вес меньше лучшего, то запоминаются направление и вес:

        если вес < лучшийВес
          то
            лучшееНапр := напр;
            лучшийВес := вес;
        все
    все
  кц

Возвращается значение номера лучшего по эвристике направления:

  знач := лучшееНапр;
кон

Алгоритм Решить ищет решение рекурсивно начиная с хода коня номерХода, когда конь находится на клетке шахматной доски с координатами y и x. В целочисленных переменных содержатся: напр – номер направления в любом измассивов с приращениями, nynx – координаты клетки, куда конь пойдет:

алг лог Решить(цел номерХода, цел y, цел x)
нач
  цел напр;
  цел ny, nx;

Если номер хода коня превышает число клеток, то успешное завершение:

  если номерХода > NN
    то
      знач := да;
      выход;
  все

Иначе определяем лучшее направление перемещения и координаты для хода коня:

  напр := ЛучшийХод(y, x);
  ny := y + dy[напр];
  nx := x + dx[напр];

Если конь этот ход может совершить, то он его совершает:

  если МожноХодить(ny, nx)
    то
      доска[ny, nx] := номерХода;

Если допускается решение из совершенного хода, то ус-пешное завершение, иначе происходит отмена хода коня:

      если Решить(номерХода + 1, ny, nx)
        то
          знач := да;
          выход;
        иначе
          доска[ny, nx] := 0;
      все
  все

В любом другом случае решений нет:

  знач := нет;
кон

Рисунок 1. Результаты работы программы

Рисунок 1. Результаты работы программы

Полный исходный текст программы находится на сайте журнала http://samag.ru. Статья позволят изучать и совершенствовать программирование на примере классической задачи информатики с умеренной сложностью.

  1. Вирт Н. Алгоритмы + структуры данных = программы / Н. Вирт. – М.: Мир, 1985. 406 с.
  2. Knight's tour // Rosetta Code. URL: http://rosettacode.org/wiki/Knight's_tour (дата обращения: 04.10.2018).
  3. Ткаченко К. Простейший рекурсивный алгоритм с возвратом и эвристикой в 1С на примере задачи о ходе коня. // «Системный администратор», № 1-2, 2018 г. – С. 65-67. URL: http://samag.ru/archive/article/3584 (дата обращения:04.10.2018).

Ключевые слова: задача о ходе коня, рекурсивный алгоритм с возвратом, рекурсивный алгоритм с эвристикой, школьный алгоритмический язык.


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru