RSS    

   Реферат: Нахождение кратчайшего пути


3. Программа определения кратчайшего пути в графе

3.1. Язык программирования Delphi.

Delphi - язык и среда программирования, относящаяся к классу RAD- (Rapid Application Development ‑ «Средство быстрой разработки приложений») средств CASE - технологии. Delphi сделала разработку мощных приложений Windows быстрым процессом, доставляющим вам удовольствие. Приложения Windows, для создания которых требовалось большое количество человеческих усилий например в С++, теперь могут быть написаны одним человеком, использующим Delphi.

Интерфейс Windows обеспечивает полное перенесение CASE-технологий в интегрированную систему поддержки работ по созданию прикладной системы на всех фазах жизненного цикла работы и проектирования системы.

Delphi обладает широким набором возможностей, начиная от проектировщика форм и кончая поддержкой всех форматов популярных баз данных. Среда устраняет необходимость программировать такие компоненты Windows общего назначения, как метки, пиктограммы и даже диалоговые панели. Работая в Windows , вы неоднократно видели одинаковые «объекты» во многих разнообразных приложениях. Диалоговые панели (например Choose File и Save File) являются примерами многократно используемых компонентов, встроенных непосредственно в Delphi, который позволяет приспособить эти компоненты к имеющийся задаче, чтобы они работали именно так, как требуется создаваемому приложению. Также здесь имеются предварительно определенные визуальные и не визуальные объекты, включая кнопки, объекты с данными, меню и уже построенные диалоговые панели. С помощью этих объектов можно, например, обеспечить ввод данных просто несколькими нажатиями кнопок мыши, не прибегая к программированию. Это наглядная реализация применений CASE-технологий в современном программировании приложений. Та часть, которая непосредственно связана с программированием интерфейса пользователя системой получила название визуальное программирование

Визуальное программирование как бы добавляет новое измерение при создании создании приложений, давая возможность изображать эти объекты на экране монитора до выполнения самой программы. Без визуального программирования процесс отображения требует написания фрагмента кода, создающего и настающего объект «по месту». Увидеть закодированные объекты было возможно только в ходе исполнения программы. При таком подходе достижение того, чтобы объекты выглядели и вели себя заданным образом, становится утомительным процессом, который требует неоднократных исправлений программного кода с последующей прогонкой программы и наблюдения за тем, что в итоге получилось.

Благодаря средствам визуальной разработки можно работать с объектами, держа их перед глазами и получая результаты практически сразу. Способность видеть объекты такими, какими они появляются в ходе исполнения программы, снимает необходимость проведения множества операций вручную, что характерно для работы в среде не обладающей визуальными средствами — вне зависимости от того, является она объектно-ориентированной или нет. После того, как объект помещен в форму среды визуального программирования, все его атрибуты сразу отображаются в виде кода, который соответствует объекту как единице, исполняемой в ходе работы программы.

Размещение объектов в Delphi связано с более тесными отношениями между объектами и реальным программным кодом. Объекты помещаются в вашу форму, при этом код, отвечающий объектам, автоматически записывается в исходный файл. Этот код компилируется, обеспечивая существенно более высокую производительность, чем визуальная среда, которая интерпретирует информацию лишь в ходе исполнения программы.

3.2. Программа «Определение кратчайшего пути в графе»

Программа «Определение кратчайшего пути в графе» разработана в среде «Delphi», работает под ОС «Windows»-95,98,2000,NT.

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

Интерфейс программы имеет следующий вид:

Верхняя панель кнопок предназначена для редактирования графа.

Кнопка «Загрузить»  предназначена для загрузки ранее сохраненного графа из файла.

Кнопка «Сохранить»  предназначена для сохранения графа в файл.

Кнопка «Переместить»  предназначена для перемещения вершин графа.

Кнопка «Удалить»  предназначена для удаления вершин графа.

При нажатии на кнопку «Новый»  рабочее поле программы будет очищено и появится возможность ввода нового графа.

Кнопка «Помощь»  вызывает помощь программы.

Для очистки результатов работы алгоритма определения кратчайшего пути в графе необходимо нажать кнопку «Обновить» .

При нажатии на кнопку «Настройки»  на экране появится окно, в котором можно настроить параметры сетки рабочего поля программы и цвета вводимого графа.

Окно настроек выглядит следующим образом:

Нижняя панель кнопок предназначена для установки параметров ввода и запуска алгоритма определения кратчайшего пути в графе. Данная панель состоит из четырех кнопок:

При включенной кнопке «Показывать сетку»  отображается сетка для удобства ввода вершин.

Для автоматического ввода длины ребра графа необходимо нажать кнопку .

При включенной кнопке «Выравнивать по сетке»  новые вершины будут автоматически выравниваться по координатной сетке.

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

Алгоритм определения кратчайшего пути между вершинами графа описан следующим модулем программы:

unit MinLength;

interface

uses

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

  StdCtrls,IO,Data,AbstractAlgorithmUnit;

type

  TMinLength = class(TAbstractAlgorithm)

  private

     StartPoint:integer;

     EndPoint:integer;

     First:Boolean;

     Lymbda:array of integer;

     function Proverka:Boolean;

  public

     procedure Make;

  end;

var

  MyMinLength: TMinLength;

implementation

uses MainUnit, Setting;

procedure TMinLength.Make;

         var i ,j  : integer;

            PathPlace,TempPoint:Integer;

            flag:boolean;

         begin

           with MyData do begin

     StartPoint:=MyIO.FirstPoint;

     EndPoint:=MyIO.LastPoint;

                     SetLength(Lymbda,Dimension+1);

            SetLength(Path,Dimension+1);

           for i:=1 to Dimension do

              Lymbda[i]:=100000;

           Lymbda[StartPoint]:=0;

           repeat

             for i:=1 to Dimension do

                for j:=1 to Dimension do

                   if Matrix[i,j]=1 then

                     if  ( ( Lymbda[j]-Lymbda[i] ) > MatrixLength[j,i] )

                       then Lymbda[j]:=Lymbda[i] + MatrixLength[j,i];

           until Proverka ;

           Path[1]:= EndPoint ;

           j:=1;

           PathPlace:=2;

           repeat

             TempPoint:=1;

             Flag:=False;

             repeat

               if ( Matrix[ Path[ PathPlace-1 ],TempPoint] =1  )and (

                  Lymbda[ Path[ PathPlace-1] ] =

                   ( Lymbda[TempPoint] + MatrixLength[ Path[PathPlace-1 ], TempPoint] ) )

                   then Flag:=True

                   else Inc( TempPoint );

             until Flag;

             Path[ PathPlace ]:=TempPoint;

             inc( PathPlace );

             MyIO.DrawPath(Path[ PathPlace-2 ],Path[ PathPlace -1],true);

 //            ShowMessage('f');

           until(Path[ PathPlace - 1 ] = StartPoint);

//           MyIO.DrawPath(Path[ PathPlace-1 ],Path[ PathPlace ],true);

           end;

         end;

function TMinLength.Proverka:Boolean;

         var i,j:integer;

             Flag:boolean;

         begin

           i:=1;

           Flag:=False;

           With MyData do begin

           repeat

             j:=1;

             repeat

               if Matrix[i,j]=1 then

               if ( Lymbda[j]-Lymbda[i] )>MatrixLength[j,i]then Flag:=True;

               inc(j);

             until(j>Dimension)or(Flag);

             inc(i);

           until(i>Dimension)or(Flag);

           Result:=not Flag;

           end;

         end;

end.

Рабочее поле программы предназначено для визуального ввода графов.

Рабочее поле с введенным графом выглядит следующим образом:

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.