Иллюстрированный самоучитель по Delphi 7 для начинающих

Поиск пути

procedure TForml.ButtonlClick(Sender: TObject);
const
N=10;// кол-во вершин графа var
map:array[1..N,1..N]of integer; // Карта.map[i,j]ne 0,
// если точки i и j соединены
road:array[1..N]of integer;
// Дорога – номера точек карты
incl:array[1..N]of boolean; // incl[1]равен TRUE, если точка
// с номером i включена в road
start,finish:integer; // Начальная и конечная точки
found:boolean; i,j:integer;
procedure step(s,f,p:integer);
var
с:integer;// Номер точки, в которую делаем очередной шаг
i:integer;
begin
if s=f then begin
// Точки s и f совпали!
found: = TRUE;
Labell.caption: = Labell.caption+#13+'Путь:';
for i: = l to p-1 do
Labell.caption: = Labell.caption+' '
+IntToStr(road[i]); end
else begin
// выбираем очередную точку for c: = l to N do
begin // проверяем все вершины
if (map[s,c]<> 0) and (NOT incite1)
// точка соединена с текущей и не включена в маршрут
then begin
road[p]: = c;// добавим вершину в путь
incl[c]: = TRUE;// пометим вершину как включенную
step(c,f,p+l); incite]: = FALSE; road[p]: = 0;
end;
end;
end;
end; // конец процедуры step
begin
Label1.caption: =' ';
// инициализация массивов
for i: = l to N do road[i]: = 0;
for i: = l to N do incl[i]: = FALSE;
// ввод описания карты из SrtingGrid.Cells
for i: = l to N do
for j: = 1 to N do
if StringGrid1.Cells[i,j] <> ''
then map[i,j]: = StrToInt(StringGrid1.Cells[i, j];
else map[i,j]: = 0;
start: = StrToInt(Editl.text);
finish: = StrToInt(Edit2.text);
road[l]: = start;// внесем точку в маршрут
incl[start]: = TRUE;// пометим ее как включенную
step(start,finish,2);//ищем вторую точку маршрута
// проверим, найден ли хотя бы один путь
if not found
then Labell.caption: = 'Указанные точки не соединены!';
end;
end.

При запуске программы в момент активизации формы приложения происходит событие onActivate, процедура обработки которого заполняет массив StringGrid1.cells значениями, представляющими описание карты. Этаже процедура нумерует строки и столбцы таблицы, заполняя зафиксированные ячейки первого столбца и первой строки StringGrid1.

Поиск маршрута инициирует процедура TFormi.Buttoniciick, которая запускается щелчком на кнопке Поиск. Данная процедура для поиска точки, соединенной с исходной точкой, вызывает процедуру step, которая после выбора первой точки, соединенной с начальной, и включения ее в маршрут вызывает сама себя. При этом в качестве начальной точки задается уже не исходная, а текущая, только что включенная в маршрут.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.