1 / 10

Алгоритмы с возвратом

Алгоритмы с возвратом. Задача о 8 ферзях. Постановка задачи. Расставить на шахматном поле nxn n ферзей так, чтобы они не били друг друга. Для поясняющего примера пусть n=4. Соглашения при решении задачи. Каждый ферзь перемещается в пределах одной вертикали, т.е. №ферзя=№вертикали

axel-walter
Download Presentation

Алгоритмы с возвратом

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Алгоритмы с возвратом Задача о 8 ферзях

  2. Постановка задачи • Расставить на шахматном поле nxn n ферзей так, чтобы они не били друг друга. • Для поясняющего примера пусть n=4

  3. Соглашения при решении задачи • Каждый ферзь перемещается в пределах одной вертикали, т.е. №ферзя=№вертикали • Положение n-го ферзя достаточно фиксировать как № горизонтали, на которую он поставлен. • Результат расстановки ферзей можно сохранять в одномерном массиве, где • № элемента=№ ферзя. • Значение n-го элемента массива =положению n-го ферзя на горизонтали

  4. Расставляем ферзейПоследовательно проследите за действиями на поле: да – ставим ферзя, нет – ферзь под боем 2-нет 3-нет 2-нет 3-нет 3-нет 2-да 3-нет

  5. Расставляем ферзейПоследовательно проследите за действиями на поле: да – ставим ферзя, нет – ферзь под боем 4-нет 2-нет 3-нет 2-нет 4-нет 3-да 2-дальше 4-нет 2-да 4-нет

  6. Расставляем ферзейПоследовательно проследите за действиями на поле: да – ставим ферзя, нет – ферзь под боем 2-нет 3-нет 2-нет 3-дальше 2-дальше 3-нет 2-да 3-нет

  7. Расставляем ферзейПоследовательно проследите за действиями на поле: да – ставим ферзя, нет – ферзь под боем 2-нет 3-да 4-нет 1-дальше 2-нет 4-нет 1-да 2-нет 4-да 2-да

  8. Расставляем ферзей Задание 1. Заполните одномерный массив результатов Rezult.

  9. Описание алгоритма Для каждого i-го ферзя выполняются следующие действия : • Проходим в цикле по всем горизонталям. • Проверяем для каждой горизонтали gor, можно ли поставить i-го ферзя на данную горизонталь. Проверка идет с учетом уже поставленных ферзей. Задание 2. Запишите какие ферзи учитываются в проверке для постановки i-го ферзя? • Если i-ый ферзь может быть поставлен на горизонталь gor, делаем запись в массиве результатов: rezult[?]:=?Задание 3.Замените знаки вопросов на имена переменных. • Переход к расстановке следующего ферзя. Задание 4. Запишите, какой ферзь будет расставляться после i-го? Перед вами описание рекурсивной процедуры.

  10. Программная реализация Const n=4; Var Rezult: array [1..n] of integer; Procedure Print;{вывод массива с результатом} Function Correct (g,v: integer): boolean;{функция проверки} Var i:integer; Begin Correct:=true; {можно ставить ферзя} For i:=1 to ……. Do If (…….) then Correct:=false; {нельзя ставить ферзя} End; Procedure Q(i);{рекурсивная процедура расстановки ферзя} Vargor: integer; Begin For gor:=1 to n do if Correct(…,…) then begin Rezult[…]:=…; Q(….); end; End; Begin {тело программы} Q(….); End. Задание 5. Запишите, фактический параметр, который указывается при первом вызове процедуры Q

More Related