Esempio n. 1
0
void UnionFind<NODE_NUM>::createUnion(int node1, int node2){
    int root1 = _root(node1);
    int root2 = _root(node2);
    if (root1 == root2)
        return;

    if (_root_size[root1] < _root_size[root2]){
        _node_array[root1] = root2;
        _root_size[root2] += _root_size[root1];
    }
    else {
        _node_array[root2] = root1;
        _root_size[root1] += _root_size[root2];
    }
}
Esempio n. 2
0
void soctree_delete(soctree_t *p) {
  _node_t *root = _root(p);
  if (root) {
    _delete_recursive(root);
    free(root);
    root = 0;
  }
  free(p);
}
Esempio n. 3
0
int soctree_insert(soctree_t *p, int w) {
  _node_t *root = _root(p);
  if (!root) {
    return -1;
  }
  if (0 > w) {
    return -1;
  }
  if (0xffffff < w) {
    return -1;
  }
  _insert(root, 0xffffff & w, 0);
  return 0;
}
Esempio n. 4
0
int soctree_find(soctree_t *p, int w) {
  _node_t *root = _root(p);
  if (!root) {
    goto fail;
  }
  if (0 > w) {
    goto fail;
  }
  if (0xffffff < w) {
    goto fail;
  }
  _node_t *found = _find(root, 0xffffff & w, 0);
  if (!found) {
    goto fail;
  }
  return 0;
fail:
  return -1;
}
Esempio n. 5
0
bool UnionFind<NODE_NUM>::connected(int node1, int node2){
    if (_root(node1) == _root(node2))
        return true;
    else
        return false;
}
Esempio n. 6
0
int soctree_size(soctree_t *p) {
  _node_t *root = _root(p);
  return root ? _weight(root) : -1;
}
Esempio n. 7
0
	RootPanel_p Hook::root() const
	{
		return _root();
	}