123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- 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>(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;
- }
- }
- }
|