Разработка приложения интерактивного построения графа

Теория графов и алгоритмы на графах, их наиболее широкое применение в программировании. Описание основных программных моделей. Наличие наглядной графической интерпретации состояния графа. Визуализация графов и их алгоритмов средствами Macromedia Flash.

Рубрика Программирование, компьютеры и кибернетика
Вид статья
Язык русский
Дата добавления 11.03.2018
Размер файла 171,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Разработка приложения интерактивного построения графа

Хасанова Светлана Леонидовна, кандидат наук, доцент, доцент

Иванов Евгений Юрьевич, бакалавр, студент

Башкирский государственный университет

В работе реализовано приложение интерактивного построения графа.

В настоящее время теория графов и особенно алгоритмы на графах находят наиболее широкое применение в программировании. Теория графов предоставляет удобный язык для описания программных моделей. Стройная система специальных терминов и обозначений теории графов позволяют просто и доступно описывать сложные и тонкие вещи реальной действительности. Теория графов имеет широкие приложения, и важным является наличие наглядной графической интерпретации состояния графа. Визуализация графов и их алгоритмов позволяют лучше понять состояние системы. В работах [2,3] были сделаны попытки визуализация графов и их алгоритмов средствами MacromediaFlash.

Представленное приложение визуализации построения графа реализовано в среде разработки Embarcadero RAD Studio 10.1 Berlin. Данная среда разработки была выбрана в связи с тем, что она позволяет наиболее удобно реализовать структуру данных графа. В качестве структур данных для описания графа были использованы записи, списки, классы.

type

TEdge = record

istart :integer; //где istart -- индекс первой вершины ребра в TVertexList

ifinish:integer; // ifinish -- второй

value:integer;

end;

TVertexList = TList;

TEdgeList = TList;

TGraph = class

Vertex:TVertexList;

Edges :TEdgeList;

constructor Create;

destructor Destroy; override;

procedure Draw( Canvas:TCanvas );

functionFindVertexIndex( constmouse:TPoint; out index:integer ):Boolean;

procedureDeleteVertex( index:integer );

end;

граф алгоритм визуализация программирование

При запуске приложения пользователю предлагается пустая форма для построения графа (рис. 1).

Рисунок 1. Пустая форма

Для начала построения графа пользователю необходимо нажать на форму левой кнопкой мыши, после чего на ней появится первая вершина графа (рис 2). Чтореализованоследующимобразом:

if Shift = [ssLeft] then

begin

ifGraph.FindVertexIndex( StartPt, i ) then

IndexPt :=i

else

IndexPt :=Graph.Vertex.Add( StartPt );

IsStartPt := true;

InvalidateRect( Handle, nil, false );

exit;

end;

i:=1;

Canvas.Brush.Color := clSkyBlue;

for p in Vertex do

begin

Canvas.Ellipse(p.X-R, p.Y-R, p.X+R, p.Y+R );

Canvas.TextOut(p.X -- (Length(IntToStr(i))*3), p.Y -- 6, IntToStr(i));

inc(i);

end;

Аналогичным образом создаются все последующие вершины.

Рисунок 2. Построение вершин

Удаление вершины реализовано нажатием на вершине правой кнопкой мыши, при этом оставшиеся вершины будут переиндексированы:

if Shift = [ssRight] then

begin

ifGraph.FindVertexIndex( StartPt, i ) then

Graph.DeleteVertex(i );

InvalidateRect( Handle, nil, false );

end;

procedureTGraph.DeleteVertex( index:integer );

var i:integer;

e:TEdge;

begin

i := 0;

whilei<Edges.Count do

begin

e := Edges[i];

if(e.istart = index )or( e.ifinish = index )then

begin

Edges.Delete(i);

continue;

end;

Inc(i );

end;

Vertex.Delete( index );

//одна вершина была удалена -- нужна переиндексовка рёбер

for i:=0 to Edges.Count-1 do

begin

e := Edges[i];

ife.istart>= index then

Dec(e.istart );

ife.ifinish>= index then

Dec(e.ifinish );

Edges[i] := e;

end;

end;

На следующем этапе строится ребро графа. Для этого, зажав клавишу «Clrl» и левую кнопку мыши, протянем ребро от начальной до конечной вершины. При этом происходит интерактивная прорисовка графа (рис. 3).

Рисунок 3. Построение ребра

Для построения ребра был реализован следующий код:

ifssCtrl in Shift then

begin

if not Graph.FindVertexIndex( StartPt, i ) then

exit;

IndexPt :=i;

StartPt :=Graph.Vertex[i];

FinishPt :=StartPt;

IsStartLn := true;

InvalidateRect( Handle, nil, false );

exit;

end;

ifIsStartLn then

begin

FinishPt := Point(X,Y);

IsFinishLn :=Graph.FindVertexIndex( FinishPt, i );

ifIsFinishLn then

begin

IndexFinish :=i;

FinishPt :=Graph.Vertex[i];

end;

InvalidateRect( Handle, nil, false );

end;

Отпустив зажатые клавиши, пользователю будет предложено ввести вес ребра, посредством диалогового окна (рис. 4), реализованного следующим образом:

begin

ifIsStartLn and IsFinishLn then

begin

e.istart := IndexPt;

e.ifinish := IndexFinish;

str := InputBox('Введите вес ребра', 'Вес: ', '0');

e.value := strtoint(str);

ife.istart<>e.ifinishthen // исключаем создание ребра -- петли

Graph.Edges.Add( e );

end;

IsFinishLn := false;

IsStartLn := false;

IsStartPt := false;

InvalidateRect( Handle, nil, false );

end;

Рисунок 4. Диалоговое окно выбора веса ребра

Особенностью реализованного приложения является возможность передвигать вершины в более удобную позицию, использовав технологию “Drag-Draw”. Для этого пользователю надо зажать левую кнопку мыши на вершине, которую необходимо передвинуть (рис 5). При этом будет перерисована как сама вершина, так и исходящие из нее ребра, с помощью следующего кода:

if Shift = [ssLeft] then

begin

ifGraph.FindVertexIndex( StartPt, i ) then

IndexPt :=i

else

IndexPt :=Graph.Vertex.Add( StartPt );

IsStartPt := true;

InvalidateRect( Handle, nil, false );

exit;

end;

ifIsStartPt then

begin

Graph.Vertex[IndexPt] := Point(X,Y);

InvalidateRect( Handle, nil, false );

exit;

end;

На рис. 5 приведен пример «перетаскивания» вершины 2.

Рисунок 5. Перемещение вершин

Графы имеют множество приложений: для описания алгоритмов автоматического проектирования, при установлении разного рода соответствий, при решении транспортных задач, в программировании, теории игр и т.д. Любая система, предполагающая наличие дискретных состояний или наличие узлов и переходов между ними может быть описана графом. Теория графов, на данный момент, применяется и в таких областях, как экономика, психология и биология [1]. Графы представляют собой наиболее абстрактную структуру, с которой приходится сталкиваться в теории структур данных, поэтому их алгоритмы сложны для понимания и требуют визуализации.

Список литературы

1. Березина Л.Ю. Графы и их применение М.: Просвещение, 1979. - 143 с.

2. Хасанова С.Л., Зайнуллин Ф.Ф. Интерактивное приложение Визуализация алгоритмов на графах // Роспатент № 2016619842 31.08.2016

Размещено на Allbest.ur


Подобные документы

  • Применение теории графов и алгоритмов на графах среди дисциплин и методов дискретной математики. Граф как совокупность двух множеств. Основные способы численного представления графа. Элементы и изоморфизмы графов. Требования к представлению графов в ЭВМ.

    курсовая работа [162,2 K], добавлен 04.02.2011

  • Этапы нахождения хроматического числа произвольного графа. Анализ примеров раскраски графа. Характеристика трудоемкости алгоритма раскраски вершин графа Мейниеля. Особенности графов, удовлетворяющих структуру графов Мейниеля, основные классы графов.

    курсовая работа [1,1 M], добавлен 26.06.2012

  • Способы построения остовного дерева (алгоритма поиска в глубину и поиска в ширину). Вид неориентированного графа. Понятие и алгоритмы нахождения минимальных остовных деревьев. Последовательность построения дерева графов по алгоритмам Крускала и Прима.

    презентация [22,8 K], добавлен 16.09.2013

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

    реферат [39,6 K], добавлен 06.03.2010

  • Определение понятия графа как набора вершин и связей между ними. Способы решения задач по программированию согласно теории графов на примерах заданий "Дороги", "Перекрестки", "Скрудж Мак-Дак", используя рекурсивные функции и рекуррентные соотношения.

    курсовая работа [36,2 K], добавлен 10.03.2010

  • Основные понятия и определения теории графов: теоремы и способы задания графа, сильная связность графов. Построение блок-схем алгоритма, тестирование разработанного программного обеспечения, подбор тестовых данных, анализ и исправление ошибок программы.

    курсовая работа [525,6 K], добавлен 14.07.2012

  • Математические графы, области их применения. Способы раскраски вершин и ребер графов, задачи на их применение. Разработка алгоритма, работающего на основе операций с матрицей смежности. Описание логической структуры программы. Пример зарисовки графа.

    курсовая работа [145,5 K], добавлен 27.01.2013

  • Области применения теории графов. Алгоритм решения задачи поиска инвариантного и полного графа. Реализация программы с графическим интерфейсом пользователя на основе алгоритма. Реализация редактора графа и вывод полученных результатов в понятной форме.

    курсовая работа [493,3 K], добавлен 27.12.2008

  • Способ представления графа в информатике. Алгоритмы поиска элементарных циклов в глубину в неориентированных графах. Описание среды wxDev-C++, последовательность создания проекта. Руководство пользователю программы поиска и вывода на экран простых циклов.

    курсовая работа [783,2 K], добавлен 18.02.2013

  • История и термины теории графов. Описание алгоритма Дейкстры. Математическое решение проблемы определения кратчайшего расстояния от одной из вершин графа до всех остальных. Разработка программы на объектно-ориентированном языке программирования Delphi 7.

    контрольная работа [646,9 K], добавлен 19.01.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.