//remove an edge from the graph. requires updating the nodes involved with the edge. public virtual void RemoveEdge(GraphEdge e) { e.node1.edges.Remove(e); e.node2.edges.Remove(e); e.node1.neighbors.Remove(e.node2); e.node2.neighbors.Remove(e.node1); edges.Remove(e); nodeToEdgeDict.Remove(CombineHashes(e.node1, e.node2)); }
//remove an edge based on the two nodes in the edge (overload of above) public virtual void RemoveEdge(GraphNode n1, GraphNode n2) { GraphEdge edge = GetEdge(n1, n2); if (edge == null) { return; } n1.edges.Remove(edge); n2.edges.Remove(edge); n1.neighbors.Remove(n2); n2.neighbors.Remove(n1); edges.Remove(edge); nodeToEdgeDict.Remove(CombineHashes(n1, n2)); }
public override void CreateEdge(GraphNode node1, GraphNode node2) { if (!nodes.Contains(node1) || !nodes.Contains(node2)) { throw new InvalidOperationException("Cannot add an edge if one or more of the nodes arent in the graph."); } if (node1.edges.Count > 0 && node2.edges.Count > 0) { throw new InvalidOperationException("Can't create an edge between nodes that are already connected to tree."); } GraphEdge newEdge = new GraphEdge(node1, node2); edges.Add(newEdge); nodeToEdgeDict[CombineHashes(node1, node2)] = newEdge; }
//Creates an edge in the graph between the two given nodes, if they exist in the graph public virtual void CreateEdge(GraphNode node1, GraphNode node2) { if (!nodes.Contains(node1) || !nodes.Contains(node2)) { throw new InvalidOperationException("Cannot add an edge if one or more of the nodes arent in the graph."); } GraphEdge newEdge = new GraphEdge(node1, node2); edges.Add(newEdge); try { nodeToEdgeDict.Add(CombineHashes(node1, node2), newEdge); } catch (ArgumentException) { Debug.Log("hash collision: " + node1.GetHashCode().ToString() + " " + node2.GetHashCode().ToString() + " " + CombineHashes(node1, node2).ToString()); Debug.Log(nodeToEdgeDict[CombineHashes(node1, node2)].ToString()); return; } }
//Creates an edge in the graph between the two given nodes, if they exist in the graph public virtual void CreateEdge(GraphNode node1, GraphNode node2) { if (!nodes.Contains(node1) || !nodes.Contains(node2)) { throw new InvalidOperationException("Cannot add an edge if one or more of the nodes arent in the graph."); } GraphEdge newEdge = new GraphEdge(node1, node2); edges.Add(newEdge); try { nodeToEdgeDict.Add(CombineHashes(node1, node2), newEdge); } catch(ArgumentException) { Debug.Log("hash collision: " + node1.GetHashCode().ToString() + " " + node2.GetHashCode().ToString() + " " + CombineHashes(node1, node2).ToString()); Debug.Log(nodeToEdgeDict[CombineHashes(node1, node2)].ToString()); return; } }