-
HOW WOULD I IMPLEMENT IT HERE
class Point
{
public:
Point(): x(0),y(0),value(-1),index(0) PARENT(NULL){}
Point(int xCoordinate, // x coordinate in (x,y)
int yCoordinate // y coordinate in (x,y)
): x(xCoordinate), y(yCoordinate),value(-1),index(0),PARENT(NULL) {}
Point(const Point & rhs): x(rhs.x), y(rhs.y), index(rhs.index),
value(rhs.value) PARENT->RHS->PARENT{}//Copy Constructor
Point & operator =(const Point & rhs);
POINT * PARENT;
int x;
int y;
int index; //place label
int value; //value inside place label
};
iS THIS THE RIGHT WAY
-
I would go with
Code:
class Point {
public:
int x;
int y;
Point* parent;
Point(int newX, int newY) : x(newX), y(newY) {
parent = NULL;
}
private:
// define private since we shouldn't have to call them
Point& operator=(Point& left, Point& right);
Point(const Point&);
};
-
thanks i will check that out and talk to you tommorrow thanks
-
How would i do union by size with parent
i would have to do parent->point.value = negative what ever right
-
nick when i create does functions there is conflict because we are use a pointer with a reference
Code:
Point* DisjSets::findPathcompression( Point & a )
{
if( a.parent == NULL)
return &a;
else
return a.parent = findPathcompression(a.parent);
}
i still can get it to work correctly my union sets is wrong
my union set by size is
Code:
void DisjSets::unionSets( Point & a, Point & b )
{
int indexA = findPathcompression(a);
int indexB = findPathcompression(b);
if(s[indexA].value < s[indexB].value ||
s[indexA].value == s[indexB].value)
{
s[indexA].value += s[indexB].value;
s[b.index].value = s[indexA].index;
}
else
{
s[indexB].value += s[indexA].value;
s[a.index].value = s[indexB].index;
}
}
i made the path compression send an int out
Code:
int DisjSets::findPathcompression( Point & a )
{
if( a.value < 0 )
return a.index;
else
return s[a.index].value = findPathcompression(s[a.value]);
}
my = operator is correct
Code:
Point& Point::operator =(const Point & rhs)
{
rhs.value = index;
return *this;
}