Ejemplo n.º 1
0
/**
 * Finds the subset that @a set is member of.
 * @param[in] set Set.
 * @param[out] diset Diset.
 * @return @a set subset.
 */
piojo_diset_sid_t
piojo_diset_find(piojo_diset_sid_t set, const piojo_diset_t *diset)
{
        tree_t *dtree;
        PIOJO_ASSERT(diset);

        dtree = find_subset(set, diset);
        return dtree->parent;
}
Ejemplo n.º 2
0
static tree_t*
find_subset(piojo_diset_sid_t set, const piojo_diset_t *diset)
{
        tree_t *dtree;
        dtree = (tree_t*) piojo_hash_search(&set, diset->trees);
        if (dtree->parent == set){
                return dtree;
        }
        return find_subset(dtree->parent, diset);
}
Ejemplo n.º 3
0
/**
 * Joins two sets in diset.
 * @param[in] set1 Set.
 * @param[in] set2 Set.
 * @param[out] diset Diset.
 */
void
piojo_diset_union(piojo_diset_sid_t set1, piojo_diset_sid_t set2,
                  piojo_diset_t *diset)
{
        tree_t *dtree1, *dtree2;
        PIOJO_ASSERT(diset);

        dtree1 = find_subset(set1, diset);
        dtree2 = find_subset(set2, diset);
        if (dtree1->parent != dtree2->parent){
                if (dtree1->rank < dtree2->rank){
                        dtree1->parent = dtree2->parent;
                }else if(dtree1->rank > dtree2->rank){
                        dtree2->parent = dtree1->parent;
                }else{
                        dtree2->parent = dtree1->parent;
                        ++dtree1->rank;
                }
        }
}
Ejemplo n.º 4
0
int main()
{
    int a[] = {1, 2, 3 ,4};
    int i, j =0;
    for(i=0;i<4;i++)
    {
        use[i]=0;
    }

    for(i=1;i<=4;i++)
    {
        find_subset(a, 4, i, j, 0);
    }
    return 0;
}
Ejemplo n.º 5
0
int 
find_all (int m, int n, char input[][n], char result[][n])
{
	int i = 0;
	trienode *root = newnode (0);
	for (i=0; i<m; i++) {
		Insert (root, input[i]);

	int index = 0;
	for (i=0; i<ALPHABET_SIZE; i++) {
		if (root->children[i]) {
			find_subset (root->children[i], n, &index, 0, result);
		}
	}
	return;
}
Ejemplo n.º 6
0
find_subset (trienode *root, int n, int *index, int level, char result[][n])
{
	result[*index][level] = root->c;
	if (root->isLeaf) {
		result[*index][level+1] = '\0';
		*index++;
		return;
	}

	for (i=0; i<ALPHABET_SIZE; i++) {
		if (root->children[i]) {
			find_subset (root->children[i], n, index, level+1, result);
		}
	}

	return;
}
Ejemplo n.º 7
0
void find_subset(int *a, int n, int size, int curr, int start)
{
    int i;
    if(curr == size)
    {
        print_array(a);
        return;
    } else {
        for(i=start;i<(n);i++)
        {
            if(use[i] == 0)
            {
                use[i]=1;
                find_subset(a, n, size, curr+1, i+1);
                use[i]=0;
            }
        }
    }
}
Ejemplo n.º 8
0
 void find_subset(int k , int begin, int end, vector<int>& nums){
     if(begin + k -1 > end) return;
     if(k < 0) return;
     if(k == 0){
         subset_Dup.push_back(subset);
         return 0;
     }
     int i = begin;
     while(nums[i] == nums[begin]) i++;
     
     for(int j = 0; j <= i-begin ; i++){
         if(j > 0)
         subset.push_back(nums[begin]);
         find_subset(k - j, i, end, nums);
     }
     
     for(int j = 0; j < i-begin ; i++)
         subset.pop_back();
     
     
     return;
     
 }