Библиотека за работа с графи
Въведение
Ще ви представя една библиотека за работа с графи. Библиотеката е лично творение и е изработена на C# 2.0. Ако се занимавате с Теория на графите, с нейна помощ много по-лесно ще можете да управлявате един граф. За сега библиотеката не е много голяма и има вероятност да срещнете различни проблеми при работата с нея. Все пак, една основна функционалност е постигната. Ако сте я пробвали и сте срещнали някакъв проблем, можете да се свържете с мен и да го отстраня.
Работа с библиотеката
Преди да започнете работа с библиотеката, трябва да в вградите във вашия проект. По-горе съм описал как става това. След това трябва да включите пространството от имена във вашия клас:
- using OmegaGraph;
Ето и примерен код за работа с графи. Не мисля, че трябва да се обяснява много, тъй като всичко е направено максимално лесно за разбиране и работа. В този пример ще ви покажа как можете да си построите покриващо дърво (в ширина и дълбочина) от даден граф.
- OGraph myGraph = new OGraph();
- // добавяме върхове в графа
- myGraph.Vertices.Add(new int[] { 1, 2, 3, 4, 5, 6, 7, 8 });
- // добавяме и ребрата
- myGraph.Edges.Add(new Edge(1, 2));
- myGraph.Edges.Add(new Edge(1, 4));
- myGraph.Edges.Add(new Edge(2, 4));
- myGraph.Edges.Add(new Edge(2, 3));
- myGraph.Edges.Add(new Edge(2, 5));
- myGraph.Edges.Add(new Edge(2, 6));
- myGraph.Edges.Add(new Edge(4, 5));
- myGraph.Edges.Add(new Edge(4, 7));
- myGraph.Edges.Add(new Edge(5, 6));
- myGraph.Edges.Add(new Edge(6, 7));
- myGraph.Edges.Add(new Edge(6, 8));
- myGraph.Edges.Add(new Edge(7, 8));
- // сега искаме да си построиме покриващо дърво в ширина и дълбочина
- GraphAlgorithm algorithm = new GraphAlgorithm(myGraph);
- OGraph spanningTreeInDepth = algorithm.CreateSpanningTree(GraphAlgorithm.TreeType.Deep);
- foreach (Edge edge in spanningTreeInDepth.Edges)
- {
- Console.WriteLine(edge);
- }
- OGraph spanningTreeInWidth = algorithm.CreateSpanningTree(GraphAlgorithm.TreeType.Wide);
- foreach (Edge edge in spanningTreeInWidth.Edges)
- {
- Console.WriteLine(edge);
- }
Console.WriteLine(edge) ще изведе на екрана x->y : v, където x и y са върховете на реброто, а v е неговата стойност (ако е указана такава при добавянето на реброто). Ето как изглеждат и самите покриващи дървета:
В библиотеката са включени и алгоритмите на Прим и Крускал за построяване на оптимално покриващо дърво, както и алгоритъмът на Дейкстра за дърво на най-късите пътища в граф.
Нека си построиме следния граф, като този път ще укажем стойност (цена) на всяко ребро:
- OGraph myGraph = new OGraph();
- myGraph.Vertices.Add(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });
- myGraph.Edges.Add(new Edge(1, 2, 2));
- myGraph.Edges.Add(new Edge(1, 4, 1));
- myGraph.Edges.Add(new Edge(2, 3, 1));
- myGraph.Edges.Add(new Edge(2, 4, 5));
- myGraph.Edges.Add(new Edge(2, 5, 3));
- myGraph.Edges.Add(new Edge(2, 6, 2));
- myGraph.Edges.Add(new Edge(4, 5, 1));
- myGraph.Edges.Add(new Edge(4, 7, 2));
- myGraph.Edges.Add(new Edge(4, 8, 4));
- myGraph.Edges.Add(new Edge(5, 6, 4));
- myGraph.Edges.Add(new Edge(5, 8, 3));
- myGraph.Edges.Add(new Edge(5, 9, 4));
- myGraph.Edges.Add(new Edge(6, 9, 3));
- myGraph.Edges.Add(new Edge(8, 9, 5));
- GraphAlgorithm algorithm = new GraphAlgorithm(myGraph);
- OGraph minSpanningTreeByPrim = algorithm.CreateOptimalSpanningTree(OGraph.OptimalType.Minimum, GraphAlgorithm.AlgorithmType.Prim);
- Console.WriteLine("Algoritum na Prim");
- foreach (Edge edge in minSpanningTreeByPrim.Edges) Console.WriteLine(edge);
- Console.WriteLine();
- Console.WriteLine("Algoritum na Kruskal");
- OGraph minSpanningTreeByKruskal = algorithm.CreateOptimalSpanningTree(OGraph.OptimalType.Minimum, GraphAlgorithm.AlgorithmType.Kruskal);
- foreach (Edge edge in minSpanningTreeByKruskal.Edges) Console.WriteLine(edge);
- Console.WriteLine();
- Console.WriteLine("Algoritum na Dejkstra");
- OGraph minSpanningTreeByDejkstra = algorithm.CreateValueTree(OGraph.OptimalType.Minimum);
- foreach (Edge edge in minSpanningTreeByDejkstra.Edges) Console.WriteLine(edge);
Заключение
Библиотеката е все още БЕТА версия и е много вероятно да срещнете проблеми. Въпреки това, една основа е покрита от нея. Ако открите някаква грешка, можете да се свържете с мен.
- Файлове, към тази статия:
- OmegaGraph.dll
Коментари
Към тази статия все още няма коментари. Бъдете първи и напишете вашия коментар.

