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

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

Upload: axel-walter

Post on 01-Jan-2016

30 views

Category:

Documents


1 download

DESCRIPTION

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

TRANSCRIPT

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

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

Задача о 8 ферзяхЗадача о 8 ферзях

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

Постановка задачиПостановка задачи

Расставить на шахматном поле Расставить на шахматном поле nxn n nxn n ферзей так, чтобы они не ферзей так, чтобы они не били друг друга.били друг друга.

Для поясняющего примера пусть Для поясняющего примера пусть n=4n=4

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

Соглашения при решении задачиСоглашения при решении задачи

Каждый ферзь перемещается в Каждый ферзь перемещается в пределах одной вертикали, т.е. пределах одной вертикали, т.е. №ферзя=№вертикали№ферзя=№вертикали

Положение Положение n-n-го ферзя достаточно го ферзя достаточно фиксировать как № горизонталификсировать как № горизонтали, , на на которую он поставлен.которую он поставлен.

Результат расстановки ферзей можно Результат расстановки ферзей можно сохранять в одномерном массиве, где сохранять в одномерном массиве, где – № № элемента=№ ферзя. элемента=№ ферзя. – Значение Значение n-n-го элемента массива =го элемента массива =

положению положению n-n-го ферзя на горизонтали го ферзя на горизонтали

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

Расставляем ферзейРасставляем ферзейПоследовательно проследите за действиями на поле: Последовательно проследите за действиями на поле:

да – ставим ферзя, нет – ферзь под боем да – ставим ферзя, нет – ферзь под боем

1 - да1 - да2-нет

2-да

2-нет

3-нет

3-нет

3-нет

3-нет

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

Расставляем ферзейРасставляем ферзей Последовательно проследите за действиями на поле: Последовательно проследите за действиями на поле:

да – ставим ферзя, нет – ферзь под боем да – ставим ферзя, нет – ферзь под боем

1 - да1 - да 2-нет

2-да

3-нет

3-да2-нет

2-дальше

4-нет

4-нет

4-нет

4-нет

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

Расставляем ферзейРасставляем ферзей Последовательно проследите за действиями на поле: Последовательно проследите за действиями на поле:

да – ставим ферзя, нет – ферзь под боем да – ставим ферзя, нет – ферзь под боем

1 - да1 - да 2-нет

2-да

3-нет

3-дальше

2-нет

2-дальше

3-нет

3-нет

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

Расставляем ферзейРасставляем ферзей Последовательно проследите за действиями на поле: Последовательно проследите за действиями на поле:

да – ставим ферзя, нет – ферзь под боем да – ставим ферзя, нет – ферзь под боем

1-дальше

1-да

2-нет

2-нет

2-нет

2-да

3-да 4-нет

4-нет

4-да

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

Расставляем ферзейРасставляем ферзей

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

1 элемент1 элемент 2 2 элементэлемент

3 3 элементэлемент

4 4 элементэлемент

?? ?? ?? ??

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

Описание алгоритмаОписание алгоритма Для каждого Для каждого i-i-го ферзя выполняются следующие го ферзя выполняются следующие

действия :действия :1.1. Проходим в цикле по всем горизонталям.Проходим в цикле по всем горизонталям.

Проверяем для каждой горизонтали Проверяем для каждой горизонтали gorgor, можно ли , можно ли поставить поставить i-i-го ферзя на данную горизонталь. го ферзя на данную горизонталь. Проверка идет с учетом уже поставленных ферзей. Проверка идет с учетом уже поставленных ферзей.

Задание 2Задание 2. . Запишите какие ферзи учитываются в Запишите какие ферзи учитываются в проверке для постановки проверке для постановки i-i-го ферзя?го ферзя?

Если Если i-i-ый ферзь может быть поставлен на ый ферзь может быть поставлен на горизонталь горизонталь gorgor, делаем запись в массиве , делаем запись в массиве результатов: результатов: rezult[rezult[??]:=]:=??Задание 3Задание 3.. Замените знаки вопросов на имена Замените знаки вопросов на имена переменных.переменных.

Переход к расстановке следующего ферзя. Переход к расстановке следующего ферзя. Задание 4Задание 4. Запишите, какой ферзь будет . Запишите, какой ферзь будет расставляться после расставляться после i-i-го? го?

Перед вами описание рекурсивной процедуры.Перед вами описание рекурсивной процедуры.

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

Программная реализацияПрограммная реализацияConst n=4;Const n=4;VarVarRezult: array [1..n] of integer;Rezult: array [1..n] of integer;Procedure Print;Procedure Print; {{вывод массива с результатомвывод массива с результатом}}Function CorrectFunction Correct (g,v: integer): boolean; (g,v: integer): boolean; {{функция проверкифункция проверки}}Var i:integer;Var i:integer;BeginBeginCorrect:=true; {Correct:=true; {можно ставить ферзяможно ставить ферзя}}For i:=1 to ……. DoFor i:=1 to ……. DoIf (…….) then Correct:=false; {If (…….) then Correct:=false; {нельзя ставить ферзянельзя ставить ферзя}}End;End;Procedure Q(i);Procedure Q(i); {{рекурсивная процедура расстановки ферзярекурсивная процедура расстановки ферзя}}Var gor: integer;Var gor: integer;BeginBeginFor gor:=1 to n doFor gor:=1 to n do

if Correct(…,…) thenif Correct(…,…) thenbeginbeginRezult[…]:=…;Rezult[…]:=…;Q(….);Q(….);end;end;

End;End;BeginBegin {{тело программытело программы}}Q(….);Q(….);End.End.Задание Задание 55. . Запишите, фактический параметр, который указывается Запишите, фактический параметр, который указывается

при первом вызове процедуры при первом вызове процедуры Q Q