using System.Collections.Generic;
public static void Main()
Console.WriteLine("Hello World");
public Vertex(string name)
public override string ToString()
public override bool Equals(object obj)
return ((Vertex)obj).Name == _name;
public override int GetHashCode()
return _name.GetHashCode();
public Pair(T first, T last)
public bool Contains(T item)
if (item.Equals(_first)) return true;
if (item.Equals(_last)) return true;
public T GetOther(T item)
if (item.Equals(_first)) return _last;
if (item.Equals(_last)) return _first;
private Pair<Vertex> _vertices;
public Pair<Vertex> Vertices
get { return _vertices; }
set { _vertices = Vertices; }
public Edge(Vertex a, Vertex b)
_vertices = new Pair<Vertex>(a, b);
public Edge(Pair<string> p)
_vertices = new Pair<Vertex>(new Vertex(p.First), new Vertex(p.Last));
public override string ToString()
return _vertices.First + " - " + _vertices.Last;
public override bool Equals(object obj)
return (_vertices.First.Equals(obj) && _vertices.Last.Equals(obj));
public override int GetHashCode()
return _vertices.First.GetHashCode() * 23 + _vertices.Last.GetHashCode();
private Dictionary<Vertex, bool> _vertices;
private Dictionary<Edge, bool> _edges;
get { return _vertices.Keys.ToArray<Vertex>(); }
get { return _edges.Keys.ToArray<Edge>(); }
_vertices = new Dictionary<Vertex, bool>();
_edges = new Dictionary<Edge, bool>();
public Graph(Vertex[] vertices, Edge[] edges)
_vertices = new Dictionary<Vertex, bool>();
_edges = new Dictionary<Edge, bool>();
foreach(Vertex v in vertices)
public Graph(string[]vertices, Edge[] edges)
_vertices = new Dictionary<Vertex, bool>();
_edges = new Dictionary<Edge, bool>();
foreach(string v in vertices)
public Graph(Vertex[] vertices, Pair<string> edges)
_vertices = new Dictionary<Vertex, bool>();
_edges = new Dictionary<Edge, bool>();
foreach(Vertex v in vertices)
foreach(Pair<string> e in edges)
public bool AddNewVertex(Vertex v)
if(!_vertices.ContainsKey(v))
public bool AddNewEdge(string a, string b)
return AddNewEdge(new Pair<string>(a, b));
public bool AddNewEdge(Pair<string> p)
return AddNewEdge(new Edge(p));
public bool AddNewEdge(Edge newEdge)
if(!_edges.ContainsKey(newEdge))
Vertex firstV = newEdge.Vertices.First;
Vertex lastV = newEdge.Vertices.Last;
if (!_vertices.ContainsKey(firstV))
if(!_vertices.ContainsKey(lastV))
_edges.Add(newEdge, true);
public bool RemoveVertex(Vertex vertex)
if(!_vertices.ContainsKey(vertex))
foreach(Edge edge in _edges.Keys)
if(edge.Vertices.Contains(vertex))
_vertices.Remove(vertex);