Курсовая работа: Перебор с возвратом

A[x,y]:=0;

end;

3. Задача о лабиринте

Классическая задача для изучения темы. Как и предыдущие, не обходится без внимания в любой книге по информатике. Формулировка проста. Дано клеточное поле, часть клеток занята препятствиями. Необходимо попасть из некоторой заданной клетки в другую заданную клетку путем последовательного перемещения по клеткам. Изложение задачи опирается на рисунок произвольного лабиринта и две «прорисовки» с использованием простого перебора и метода «волны». Классический перебор выполняется по правилам, предложенным в 1891 г. Э.Люка в “Математических досугах”:

· в каждой клетке выбирается еще не исследованный путь;

· если из исследуемой в данный момент клетки нет путей, то возвращаемся на один шаг назад (в предыдущую клетку) и пытаемся выбрать другой путь.

Естественными модификациями задачи поиска всех путей выхода из лабиринта являются:

· поиск одного пути;

· поиск одного пути кратчайшей длины методом «волны».

Решение первой задачи.

program Labirint;

const Nmax=...;

dx:array[1..4] of integer=(1,0,-1,0);

dy:array[1..4] of integer=(0,1,0,-1);

type MyArray=array[0..Nmax+1,0..Nmax+1] of integer;

var A:MyArray;

xn,yn,xk,yk,N:integer;

procedure Init;

begin

<Ввод лабиринта, координат начальной и конечной клеток. Границы поля отмечаются как препятствия>;

end;

procedure Print;

....

begin

<вывод матрицы А - метками выделен путь выхода из лабиринта>;

end;

procedure Solve(x,y,k:integer);{k - номер шага, x,y - координаты клетки}

var i:integer;

begin

A[x,y]:=k;

К-во Просмотров: 445
Бесплатно скачать Курсовая работа: Перебор с возвратом