18
Решение задачи обхода Решение задачи обхода лабиринта с помощью лабиринта с помощью перебора с возвратом перебора с возвратом Учитель информатики и ИТ Е.А. Перова Н.Новгород 2011 Муниципальное образовательное учреждение Лицей № 36

Решение задачи обхода лабиринта с помощью перебора с возвратом

  • Upload
    gilead

  • View
    55

  • Download
    2

Embed Size (px)

DESCRIPTION

Муниципальное образовательное учреждение Лицей № 36. Учитель информатики и ИТ Е.А. Перова. Решение задачи обхода лабиринта с помощью перебора с возвратом. Н.Новгород 2011. Цель урока: изучить метод перебора с возвратом на примере задачи обхода лабиринта. Задачи урока - PowerPoint PPT Presentation

Citation preview

Page 1: Решение задачи обхода лабиринта с помощью перебора с возвратом

Решение задачи обхода Решение задачи обхода лабиринта с помощью лабиринта с помощью перебора с возвратомперебора с возвратом

Учитель информатики и ИТЕ.А. Перова

Н.Новгород2011

Муниципальное образовательное учреждение Лицей № 36

Page 2: Решение задачи обхода лабиринта с помощью перебора с возвратом

Цель урока:изучить метод перебора с возвратом на

примере задачи обхода лабиринта

Задачи урока•формировать умение составлять рекурсивный алгоритм для решения задачи методом перебора с возвратом•развивать у учащихся познавательный интерес и критическое мышление•развивать творческие способности•прививать учащимся навыки самостоятельной и исследовательской работы

Page 3: Решение задачи обхода лабиринта с помощью перебора с возвратом

Цель – попасть из некоторой заданной клетки в другую заданную клетку. За один шаг можно переместиться в одну из соседних клеток по горизонтали или вертикали, если нет перегородки.

Пример лабиринта

Задача обхода лабиринта

Два правила:

1) В каждой клетке выбирать еще не исследованный путь.

2) Если из исследуемой клетки не ведут неисследованные пути, вернуться на одну клетку назад по последнему пройденному пути.

Page 4: Решение задачи обхода лабиринта с помощью перебора с возвратом

Перебор с возвратом (backtrack) - это общий метод упорядоченного перебора.

Page 5: Решение задачи обхода лабиринта с помощью перебора с возвратом

Перебор с возвратом применяется для решения

комбинаторных задач, в которых приходится организовывать

полный перебор возможных вариантов.

Перебор с возвратом особенно удобен для решения задач,

требующих проверки потенциально большого, но конечного

числа решений.

Идея метода - при поиске решения многократно делается

попытка продолжить текущее частичное решение. Если

расширение невозможно, происходит возврат к

предыдущему более короткому частичному решению, и

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

способом.

Page 6: Решение задачи обхода лабиринта с помощью перебора с возвратом

и т.д.Решение: A=(ENNWNEEEENW)

Поиск решения для примера

M={N,S,W,E} - множество направлений: N - север, S - юг, W - запад, E - восток.

Нач. вектор: B=(), клетка (1,1)

Шаг 1: S1={E}, B=(E), клетка (2,1)

Шаг 2: S2={N,E}, B=(EN), кл. (2,2)

Шаг 3: S3={N}, B=(ENN), кл. (2,3)

Шаг 4: S4={W,E}, B=(ENNW), кл. (1,3)

Шаг 5: S5={N}, B=(ENNWN), кл. (1,4)

Шаг 6: S6={N,E}, B=(ENNWNN) кл. (1,5)

Шаг 7: S7=Ø, возврат в клетку (1,4)

Шаг 8: S6={E}, B=(ENNWNE), кл. (2,4),

Page 7: Решение задачи обхода лабиринта с помощью перебора с возвратом

Общая схема рекурсивного перебора

Решение задачи – вектор ,

удовлетворяющий заданным условиям и ограничениям, (или множество таких векторов).

- множество возможных значений для

- частичное решение,

- кандидаты для расширения до

Если , мы возвращаемся и выбираем новый элемент

Если новый элемент выбрать нельзя, мы возвращаемся еще дальше и выбираем новый элемент , и т.д.

naaaA ,, 21

iA ia

kk AS

121 ,, kaaa

kk aaaa ,,, 121

kS 1ka

1ka2ka

Page 8: Решение задачи обхода лабиринта с помощью перебора с возвратом

Задача обхода лабиринта

размеры лабиринтакоординаты старта координаты финишаматрица лабиринта

матрица лабиринта с маршрутом

n, mSX, SY

fX, fY

смещение dx, dy

Исходные данные

Результат

a[i,j]

a[i,j]

Page 9: Решение задачи обхода лабиринта с помощью перебора с возвратом

Матрица лабиринта

Стены кодируем -1, проходы – 0.

Page 10: Решение задачи обхода лабиринта с помощью перебора с возвратом

Пример входных данных9 9 размеры лабиринта1 1 координаты старта и 7 1 координаты финиша – задаем с клавиатуры

матрица лабиринта – читаем из файла.

Пример выходных данных7 8 9 0 0 матрица лабиринта с маршрутом – выводим на экран6 -1 -1 0 -1 5 4 -1 0 0-1 3 -1 -1 -11 2 0 0 0

Page 11: Решение задачи обхода лабиринта с помощью перебора с возвратом

program obhodlab;uses crt,fileutil,sysutils; const maxn=20;dx: array [1..4] of integer = (-1, 0, 1, 0);dy: array [1..4] of integer = ( 0, -1, 0, 1);var a: array [0..maxn+1, 0..maxn+1] of integer; n, m, { размеры лабиринта} sx, sy, { начальное положение} fx, fy: integer; { конечное положение}

Page 12: Решение задачи обхода лабиринта с помощью перебора с возвратом

procedure init;var i, j: integer;var labirint : text;begin for i := 0 to maxn+1 do { барьеры } for j := 0 to maxn+1 do a[i, j] := -1;read(n, m, sx, sy, fx, fy); { исходные данные }аssignfile(labirint,'lab.txt');reset(labirint); for i:=1 to n do for j := 1 to m do begin read(labirint,a[i, j]); end; closefile(labirint);end;

Page 13: Решение задачи обхода лабиринта с помощью перебора с возвратом

procedure print_labirint;var i, j: integer;begin writeln; for i := 1 to n do begin for j := 1 to m do write(a[i, j]:4); writeln; end;end;

Page 14: Решение задачи обхода лабиринта с помощью перебора с возвратом

procedure search(x, y, k: integer);var i: integer;begin a[y, x] := k; { запись варианта } if (x = fx) and (y = fy) then { решение найдено } begin print_labirint; { вывод решения } halt; end else for i := 1 to 4 do { перебор всех вариантов } if a[y+dy[i], x+dx[i]] = 0 then { вариант подходит } search(x+dx[i], y+dy[i], k+1); { рекурсивный вызов } a[y, x] := 0; { стирание варианта }end;

Page 15: Решение задачи обхода лабиринта с помощью перебора с возвратом

{ основная программа}begin init; search(sx, sy, 1); end.

Page 16: Решение задачи обхода лабиринта с помощью перебора с возвратом

Давайте обсудим

Назовите достоинства и недостатки метода

перебора с возвратом

Назовите недостатки рассмотренного

решения

Как можно их исправить?

Как можно переформулировать задачу?

Page 17: Решение задачи обхода лабиринта с помощью перебора с возвратом

Задания для самостоятельной работы

Выполните предложенный алгоритм и

проверьте на различных тестах.

Попытайтесь доработать алгоритм, устранив

недостатки.

Решите с помощью метода перебора с

возвратом следующую задачу:Сгенерировать обход конем шахматной доски, так чтобы покрыть всю область.

Page 18: Решение задачи обхода лабиринта с помощью перебора с возвратом

Источники:

Материалы Проекта «Подготовка и переподготовка профильных специалистов на базе центров образования и разработок в сфере информационных технологий в Приволжском федеральном округе» по направлению «Дополнительная подготовка школьников по дисциплине «Информатика и информационные технологии»». Раздел «Перебор с Перебор с возвратом».возвратом». Л.П. Жильцова. (Федеральное государственное бюджетное образовательное учреждение высшего профессионального образованияНижегородский государственный университет им. Н.И. Лобачевского)

Мозговой М.В. Занимательное программирование: Самоучитель. – СПб.: Питер, 2004.

http://borisvolfson.h11.ru/book/backtracking.php