private void ConnectByEdge(IEdge edge) { ISuperNode endANode = this.superNodeCache[edge.EndA.Id]; ISuperNode endBNode = this.superNodeCache[edge.EndB.Id]; if (endANode == endBNode) { // do not connect the same supernodes to themselves return; } // edges between supernodes are not duplicated. weight represent // number of edges var result = endANode.IsNeighbour(endBNode); if (result.Success) { result.Edge.Weight += 1.0; } else { var newedge = endANode.ConnectTo(endBNode, EdgeDirection.Both); newedge.Weight = 1.0; } }