public PartialSolution(PartialSolution parent, int subset, int parentSubset) : this(parent) { // Check if any vertices have been forgotten if (((subset ^ parentSubset) & parentSubset) == 0) { return; } // Rework union-find to fix forgotten vertices for (byte i = 0; i < UnionFind.Length; i++) { if ((subset & (1 << i)) != 0 && (parentSubset & (1 << i)) != 0) { byte rep = Find(i); if ((subset & (1 << rep)) == 0) { UnionFind[rep] = i; UnionFind[i] = i; } } } for (byte i = 0; i < UnionFind.Length; i++) { if ((subset & (1 << i)) == 0) { UnionFind[i] = i; } } }
public override bool Equals(object obj) { if (obj == null) { return(false); } PartialSolution objSol = (PartialSolution)obj; for (int i = 0; i < UnionFind.Length; i++) { if (Find(i) != objSol.Find(i)) { return(false); } } return(true); }
public PartialSolution(PartialSolution parent) { UnionFind = (byte[])parent.UnionFind.Clone(); hashCode = 0; }