Разработка приложения интерактивного построения графа
Теория графов и алгоритмы на графах, их наиболее широкое применение в программировании. Описание основных программных моделей. Наличие наглядной графической интерпретации состояния графа. Визуализация графов и их алгоритмов средствами 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