using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DrawGraph { public class Graph { public Node[] Nodes; public Edge[] Edges; public string Name; public bool Direction; public Graph() { Nodes = new Node[0]; Edges = new Edge[0]; Name = "G"; Direction = false; } public Graph(Node[] nodes) { Nodes = nodes; Name = "G"; Direction = false; } public Graph(Node[] nodes, Edge[] edges) { Nodes = nodes; Edges = edges; Name = "G"; Direction = false; } public Graph(Node[] nodes, Edge[] edges, string name) { Nodes = nodes; Edges = edges; Name = name; } public Graph(Node[] nodes, Edge[] edges, string name, bool isDirected) { Nodes = nodes; Edges = edges; Name = name; Direction = isDirected; } public void SetGraphName(string name) { Name = name; } public void Add(Node node) { var length = Nodes.Length; Array.Resize(ref Nodes, Nodes.Length + 1); Nodes[length] = node; } public void AddRange(Node[] node) { var startLength = Nodes.Length; Array.Resize(ref Nodes, Nodes.Length + node.Length); var j = 0; for(int i = startLength; i < Nodes.Length; i++) { Nodes[i] = node[j]; j++; } } public void Add(Edge edge) { var length = Edges.Length; Array.Resize(ref Edges, Edges.Length + 1); } public void AddRange(Edge[] edge) { var startLength = Edges.Length; Array.Resize(ref Edges, Edges.Length + edge.Length); var j = 0; for(int i = startLength; i < Edges.Length; i++) { Edges[i] = edge[j]; j++; } } public void RemoveNode(int index) { Nodes = RemoveAt(Nodes, index); } public void RemoveNode(Node node) { for(int i = 0; i < Nodes.Length; i++) { if(Node.Compare(Nodes[i], node)) { Nodes = RemoveAt(Nodes, i); break; } } } public Node GetNode(int index) { return Nodes[index]; } public Edge GetEdge(int index) { return Edges[index]; } public void RemoveEdge(int index) { Nodes = RemoveAt(Nodes, index); } public void RemoveEdge(Edge edge) { for(int i = 0; i < Edges.Length; i++) { if(Edge.Compare(Edges[i], edge)) { Edges = RemoveAt(Edges, i); break; } } } private T[] RemoveAt(T[] source, int index) { T[] dest = new T[source.Length - 1]; if (index > 0) Array.Copy(source, 0, dest, 0, index); if (index < source.Length - 1) Array.Copy(source, index + 1, dest, index, source.Length - index - 1); return dest; } } }