/DotNetGraph

DotNetGraph

Primary LanguageC#MIT LicenseMIT

DotNetGraph

DotNetGraph is class library for .NET Framework 4.6.1. This library is designed to work with generic graphs and some algorithms for them.

Data structures:

  • Node with data (label, etc)
  • Edge without weight
  • Edge with weight (type of Double)
  • Edge with data (label, etc)
  • Edge with weight (type of Double) and data
  • Graph consisting of nodes and a certain type of edge (specified above) without data
  • Graph consisting of nodes and a certain type of edge (specified above) with data

Algorithms:

  • Graph traversal - Depth-first search (non-recursive)
  • Graph traversal - Breadth-first search
  • Graph pathfinding - single-pair shortest path problem - Depth-first search (non-recursive)
  • Graph pathfinding - single-pair shortest path problem - Breadth-first search
  • Graph pathfinding - single-pair shortest path problem - Dijkstra's algorithm
  • Graph pathfinding - single-source shortest path problem - Depth-first search (non-recursive)
  • Graph pathfinding - single-source shortest path problem - Breadth-first search
  • Graph pathfinding - single-source shortest path problem - Dijkstra's algorithm

Examples

// simple graph with edges without weight and data
var graph = new Graph<string, IEdge<string>();

// simple graph with edges with weight and without data
var graph = new Graph<string, IWeightedEdge<string>();

// simple graph with edges without weight and with data (type of String - second generic parameter)
var graph = new Graph<string, IDataEdge<string, string>();

// simple graph with edges with weight and data (type of String - second generic parameter)
var graph = new Graph<string, IWeightedDataEdge<string, string>();

// nodes that contain data of type string
var node1 = new Node<string>("n1");
var node2 = new Node<string>("n2");
var node3 = new Node<string>("n3");

// weighted data edges
var edge1 = new WeightedDataEdge<string, string>(node1, node1, 2, "e1");
var edge2 = new WeightedDataEdge<string, string>(node1, node1, 5, "e2");
var edge3 = new WeightedDataEdge<string, string>(node1, node2, 5, "e3");

// adding nodes
graph.AddNode(node1);
graph.AddNode(node2);
graph.AddNode(node3);

// adding edges
graph.AddEdge(edge1);
graph.AddEdge(edge2);
graph.AddEdge(edge3);

// graph traversal
var traversal = new DepthFirstGraphTraversal<string, IWeightedDataEdge<string, string>>();
var traversalPath = traversal.Traverse(graph, startNode: node2, traverseAllNodes: false);

// graph pathfinding
var pathfinder = new DijkstraGraphPathfinding<string, IWeightedDataEdge<string, string>>();
var path = pathfinder.FindPath(graph, startNode: node1, goalNode: node3);
var paths = pathfinder.FindPaths(graph, startNode: node1);