Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Листинг 12.5. Поиск маршрута

Читайте также:
  1. II. Поиски первоначала в раннем периоде Древнегреческой философии.
  2. VI. Основные направления поисков этики Нового времени
  3. Автоматизированные информационно-поисковые системы МВД России.
  4. Алгоритм, виды алгоритмов. Алгоритмизация поиска правовой информации.
  5. Базы данных, информационно-справочные и поисковые системы
  6. Базы данных, информационно-справочные и поисковые системы (Интернет-ресурсы)
  7. Билет 16. Понятие истины. Проблема критериев истины. Диагностический процесс как поиск истины.
  8. В каких типах простого файла поиск осуществляется последовательным просмотром?
  9. В поисках альтернативы капитализму
  10. В ПОИСКАХ СЕБЯ

unit road_;

Interface

Uses

Windows, Messages, SysUtils, Classes, Graphics, Controls,

Forms,Dialogs, StdCtrls, Grids;

Type

TForml = class (TForm)

StringGridl: TStringGrid;

Edit1: TEdit; Edit2: TEdit;

Label1: TLabel; Label2: TLabel;

Label3: TLabel; Label4: TLabel;

Button1: TButton;

procedure FormActivate(Sender: TObject);

procedure ButtonlClickfSender: TObject);

private { Private declarations }

public { Public declarations }

end;

Var

Form1: TForm1;

Implementation

{$R *.DFM}

procedure TForml.FormActivate(Sender: TObject);

var i:integer;

Begin

// нумерация строк

for i:=1 to 10 do

StringGrid1.Cells[0,i]:=IntToStr(i); // нумерация колонок

for i:=1 to 10 do

StringGrid1.Cells[1,0]:=IntToStr(i);

// описание предопределенной карты

StringGridl.Cells[1,2]:='1'

StringGridl.Cells[2,l]:='1'

StringGridl.Cells[1,3]:='1'

StringGridl.Cells[3,1]:='1'

StringGridl.Cells[1,4]:='1'

StringGridl.Cells[4,1]:='1'

StringGridl.Cells[3,7]:='1'

StringGridl.Cells[7,3]:='1'

StringGridl.Cells[4,6]:='1'

StringGridl.Cells[6,4]:='1'

StringGridl.Cells[5,6]:='1'

StringGridl.Cells[6,5]:='1'

StringGridl.Cells[5,7]:='1'

StringGridl.Cells[7,5]:='1'

StringGridl.Cells[6,7]:='1'

StringGridl.Cells[7,6]:='1'

end;

procedure TForml.ButtonlClick(Sender: TObject);

Const

N=10;// кол-во вершин графа

Var

map:array[1..N,1..N]of integer;

// Карта.map[i,j]не 0, если точки i и j соединены

road:array[1..N]of integer; // Дорога - номера точек карты

incl:array[1..N]of boolean; // incl [1]равен TRUE, если точка

// с номером i включена в road

start,finish:integer; // Начальная и конечная точки

f ound: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 incl(c))

// точка соединена с текущей и не включена в маршрут

Then begin

road[p]:=c;// добавим вершину в путь

incl[c]:=TRUE;// пометим вершину как включенную

step(c,f,p+l); incl[c]:=FALSE; road[p]:=0;

end;

end;

end;

end; // конец процедуры step

Begin

Label1.caption: =' ';

// инициализация массивов

for i:=1 to N do road[i]:=0;

for i:=1 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.

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




Дата добавления: 2015-02-16; просмотров: 19 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.009 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав