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