parent
677b668c60
commit
bae9fe4149
@ -0,0 +1,51 @@ |
|||||||
|
namespace MainNamespace.Structure |
||||||
|
{ |
||||||
|
class Graph<T> |
||||||
|
{ |
||||||
|
private List<GraphNode<T>> _nodeList; |
||||||
|
|
||||||
|
public Graph() |
||||||
|
{ |
||||||
|
_nodeList = new List<GraphNode<T>>(); |
||||||
|
} |
||||||
|
|
||||||
|
public GraphNode<T> AddNode(T data) |
||||||
|
{ |
||||||
|
GraphNode<T> node = new GraphNode<T>(data); |
||||||
|
_nodeList.Add(node); |
||||||
|
return node; |
||||||
|
} |
||||||
|
|
||||||
|
public GraphNode<T> AddNode(GraphNode<T> node) |
||||||
|
{ |
||||||
|
_nodeList.Add(node); |
||||||
|
return node; |
||||||
|
} |
||||||
|
|
||||||
|
public void AddEdge(GraphNode<T> from, GraphNode<T> to, bool oneway = true, int weight = 0) |
||||||
|
{ |
||||||
|
from.Neighbors.Add(to); |
||||||
|
from.Weights.Add(weight); |
||||||
|
|
||||||
|
if (!oneway) |
||||||
|
{ |
||||||
|
to.Neighbors.Add(from); |
||||||
|
to.Weights.Add(weight); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
internal void DebugPrintLinks() |
||||||
|
{ |
||||||
|
foreach (var node in _nodeList) |
||||||
|
{ |
||||||
|
for (int i = 0; i < node.Neighbors.Count; i++) |
||||||
|
{ |
||||||
|
var neighbor = node.Neighbors[i]; |
||||||
|
var weight = node.Weights[i]; |
||||||
|
|
||||||
|
System.Console.WriteLine($"[{node.Data}] ---{weight}--- [{neighbor.Data}]"); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
namespace MainNamespace.Structure |
||||||
|
{ |
||||||
|
class GraphClient |
||||||
|
{ |
||||||
|
public static void DoWork() |
||||||
|
{ |
||||||
|
Graph<int> g = new Graph<int>(); |
||||||
|
|
||||||
|
var n1 = g.AddNode(10); |
||||||
|
var n2 = g.AddNode(20); |
||||||
|
var n3 = g.AddNode(30); |
||||||
|
var n4 = g.AddNode(40); |
||||||
|
var n5 = g.AddNode(50); |
||||||
|
|
||||||
|
g.AddEdge(n1, n3, true, 1); |
||||||
|
g.AddEdge(n2, n4, true, 2); |
||||||
|
g.AddEdge(n3, n4, true, 3); |
||||||
|
g.AddEdge(n3, n5, true, 10); |
||||||
|
|
||||||
|
g.DebugPrintLinks(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,40 @@ |
|||||||
|
namespace MainNamespace.Structure |
||||||
|
{ |
||||||
|
class GraphNode<T> |
||||||
|
{ |
||||||
|
private List<GraphNode<T>>? _neighbors; |
||||||
|
private List<int>? _weights; |
||||||
|
|
||||||
|
public T? Data { get; set; } |
||||||
|
|
||||||
|
public GraphNode() |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
public GraphNode(T data) |
||||||
|
{ |
||||||
|
this.Data = data; |
||||||
|
} |
||||||
|
|
||||||
|
public List<GraphNode<T>> Neighbors |
||||||
|
{ |
||||||
|
get |
||||||
|
{ |
||||||
|
_neighbors = _neighbors ?? new List<GraphNode<T>>(); |
||||||
|
|
||||||
|
return _neighbors; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public List<int> Weights |
||||||
|
{ |
||||||
|
get |
||||||
|
{ |
||||||
|
_weights = _weights ?? new List<int>(); |
||||||
|
|
||||||
|
return _weights; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue