67459

Условная компиляция

Лекция

Информатика, кибернетика и программирование

Не ставить коня на заблокированное поле при каждом ходе, кроме последнего (64-го). Заблокированным называется поле, на которое конь, казалось бы, может встать, но выйти из него не сможет, поскольку все возможные для последующего хода поля уже посещены.

Русский

2014-09-10

51 KB

0 чел.

Лекция 7

Условная компиляция

{$define <Имя режима>}  // Режим “<Имя режима>” включен

{$undef <Имя режима>}   // Режим “<Имя режима>” выключен

{$ifdef <Имя режима>}

  <Фрагмент кода 1>  

// Выполняется только если режим “<Имя режима>” включен

{$else}

  <Фрагмент кода 2>

// Выполняется только если режим “<Имя режима>” выключен

{$endif}

{$ifndef <Имя режима>}

  <Фрагмент кода 2>

// Выполняется только если режим “<Имя режима>” выключен

{$else}

  <Фрагмент кода 1>

// Выполняется только если режим “<Имя режима>” включен

{$endif}

Пример применения условной компиляции приведен в проекте, реализующем поиск оптимального пути по элементам матрицы (архив OptPathRD.arj).
Рекурсивные алгоритмы (продолжение)

Пример. Задача о ходе коня.

Требуется организовать обход конём всех полей шахматной доски (), начиная с заданного поля. Каждое поле конь должен посетить только один раз. Постановка на первое заданное поле, для удобства, считается первым ходом.

Существует два эвристических принципа выбора очередного хода коня.

1. Не ставить коня на заблокированное поле при каждом ходе, кроме последнего (64-го). Заблокированным называется поле, на которое конь, казалось бы, может встать, но выйти из него не сможет, поскольку все возможные для последующего хода поля уже посещены.

2. Критерий Варнсдорфа. Из всех полей, на которые конь может перейти из текущего поля, следует выбирать то, из которого есть наименьшее количество вариантов последующего хода. Это количество положительно, поскольку постановка коня на заблокированное поле исключена. Если полей с одинаковыми наименьшими количествами последующих ходов несколько, следует испытать каждое из них. Если испытать только одно, «любое» поле (как рекомендовал Варнсдорф), есть опасность зайти в тупик (найдены примеры). Действенность критерия Варнсдорфа строго не доказана, но проверена на практике.

Замкнутым называется маршрут, при котором последнее, 64-е посещенное поле находится в одном ходе коня от начального поля маршрута. Количество всех замкнутых маршрутов коня без учёта направления обхода равно 13267364410532 (количество замкнутых маршрутов с учётом направления в два раза больше). В то же время задача подсчёта всех возможных незамкнутых маршрутов значительно сложнее и не решена до сих пор. Известно, что количество незамкнутых маршрутов не превышает числа сочетаний .

Реализация решения поставленной задачи содержится в проекте KnightTurns (архив KnightTurns.rar).

В основе проекта лежит процедура

NextTurn(iRow, iCol, iNumber: integer),

которая вызывается рекурсивно. iRow, iCol – координаты поля, на которое ставится конь при совершении хода с номером iNumber.

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

Метод динамического программирования к этой задаче неприменим.

Приходится вернуться к рекурсивной функции

function BestPathRecoursive(i, j: integer): integer;

Каждый следующий экземпляр функции совершает ход на элемент с координатами (i, j), а затем пытается выбрать направление для очередного хода по элементам матрицы. Поскольку возможных направлений дальнейшего движения может быть до четырёх, приходится выбирать из них одно, лучшее, самое дешевое.

В функции BestPathRecoursive предусмотрено недопущение циклических путей. Действительно, оптимальный путь не может содержать цикла (петли), так как устранение петли из пути как минимум укорачивает путь, как максимум, удешевляет его (если петлевой участок проходит через положительные элементы матрицы).

Проект, реализующий решение поставленной задачи, содержится в архиве OptPatrRDLU.arj.


 

А также другие работы, которые могут Вас заинтересовать

21189. Криві другого порядку 454.5 KB
  Як було показано в попередній лекції загальне рівняння другого порядку в системі координат побудованій на власних векторах матриці квадратичної форми рівняння має вид 18.1 Спочатку розглянемо випадок коли це рівняння еліптичного або гіперболічного типу тобто . Якщо то рівняння 19. Якщо маємо два рівняння прямих що проходять через новий початок координат .
21190. Поверхні другого порядку 575 KB
  Розглянемо більш загальне рівняння яке містить в собі і квадратичний вираз на предмет того який геометричний обєкт воно описує.1 перетвориться у рівняння 20. В новій системі координат рівняння 20. Перепишемо рівняння 20.
21191. Матриці. Лінійні дії з матрицями. Поняття лінійного простору 207 KB
  Лінійні дії з матрицями. Вона характеризується таблицею чисел яку можна записати окремо і розглядати як суцільний обєкт що має назву матриця лат.2 Очевидно що матриця є узагальненням як числа так і вектора. Дійсно при m=1 n=1 матриця зводиться до числа при m=1 n=3 вона є векторрядок а при m=3 n=1 векторстовпець.
21192. Множення матриць. Поняття детермінанта 255.5 KB
  Множення матриць. Розглянемо якісно нову відмінну від введених в попередній лекції операцій а саме нелінійну операцію множення матриць. Визначити операцію множення матриць це означає вказати яким чином даній парі матриць ставиться у відповідність третя матриця яка і буде їх добутком.
21193. Властивості детермінантів 220.5 KB
  Детермінант транспонованої матриці дорівнює детермінанту даної. З очевидної рівності випливає що детермінант можна записати також у вигляді == =.2 Після транспонування одержимо детермінант в добутках якого індекси множників помінялись місцями.
21194. Логические модели представления знаний 99 KB
  3: sml vrt ktr tnk grz tks объекты; kls vnt krl vgr свойства. Предикаты и константы логической базы знаний Kонстанты Свойства 1 2 3 4 Колеса Винт Крыло Возит грузы kls Vnt krl vgr № Объекты Kонс танты Преди каты R kls R vnt R krl R vgr 1 Самолет sml Qsml Psml kls Psml vnt Psml krl Psml vgr 2 Вертолет vrt Qvrt Pvrt kls Pvrt vnt Pvrt krl Pvrt vgr 3 Катер Ktr Qktr Pktr kls Pktr vnt Pktr krl Pktr vgr 4 Танкер Tnk Qtnk Ptnk kls Ptnk vnt Ptnk krl Ptnk vgr 5...
21195. Алгоритмы решения логических задач 57 KB
  Используя дедуктивную логику из двух или нескольких исходных аксиом имеющихся в логической базе знаний можно вывести очередное утверждениеследствие или доказать истинность ложность целевого утверждения теоремы путем использования определенных правил вывода. Этот процесс получения новых знаний из имеющихся аксиом называют логическим выводом на знаниях. Основными типами логических задач которые решаются с использованием метода резолюций являются следующие: а задача вывода следствий в которой нужно найти все утверждения которые можно...
21196. Семантические сети представления знаний 84 KB
  Семантические сети представления знаний 9. СС это модель представления знаний в которой вся необходимая информация может быть описана в виде совокупности отношений: первый объект бинарное отношение второй объект . Эти отношения образуют иерархическую сеть в которой вершины каждого уровня знаний соединяется линиями с соответствующими вершинами верхнего и нижнего уровней. Проблема поиска решения в семантической базе знаний сводится к задаче поиска фрагмента сети подсети отражающего ответ на запрос пользователя.
21197. Фреймовые модели представления знаний 117.5 KB
  Понятие фрейма введено М. Имя таблицы является уникальным именем фрейма. Атрибуты фрейма могут также быть фреймами. У фрейма есть оболочка которая называется протофреймом прототипом образцом.