public Vertex AddSingleVertex(long id) { if (Verticies.ContainsKey(id)) { return(Verticies[id]); } Verticies[id] = new Vertex(id); return(Verticies[id]); }
//This works only for directed graph because for undirected graph we can end up adding edges two times to allEdges public void AddVertex(Vertex vertex) { if (Verticies.ContainsKey(vertex.Id)) { return; } Verticies[vertex.Id] = vertex; foreach (Edge edge in vertex.Edges) { Edges.Add(edge); } }
public void RemoveById(int id) { if (Verticies.ContainsKey(id)) { Verticies.Remove(id); if (VertexOfEdgesById.ContainsKey(id)) { VertexOfEdgesById.Remove(id); } } if (Edges.ContainsKey(id)) { var e = Edges[id]; VertexOfEdgesById.Remove(e.FromId); VertexOfEdgesById.Remove(e.ToId); Edges.Remove(id); } }
public void AddEdge(long id1, long id2, int weight) { Vertex vertex1 = null; if (Verticies.ContainsKey(id1)) { vertex1 = Verticies[id1]; } else { vertex1 = new Vertex(id1); Verticies[id1] = vertex1; } Vertex vertex2 = null; if (Verticies.ContainsKey(id2)) { vertex2 = Verticies[id2]; } else { vertex2 = new Vertex(id2); Verticies[id2] = vertex2; } Edge edge = new Edge(vertex1, vertex2, IsDirected, weight); Edges.Add(edge); vertex1.AddAdjacentVertex(edge, vertex2); if (!IsDirected) { vertex2.AddAdjacentVertex(edge, vertex1); } }
public bool ContainsVerticies(int id) { return(Verticies.ContainsKey(id)); }