Exemple #1
0
void removeNodo(ramo** albero, int val)
{
    ramo* temp = *albero;
    if(temp==NULL)
        return;
    if(temp->val==val)
    {
        temp=NULL;
        printf("rimuovo: %d\n", val);
        *albero=temp;
    }
    else
    {
        if(val>temp->val)
        {
            if(temp->right!=NULL)
                addNodo(&temp->right, val);
        }
        else if(val<temp->val)
        {
            if(temp->left!=NULL)
                addNodo(&temp->left, val);
        }
     }
}
Exemple #2
0
int removePerm(permesso_t * pp, nodo_t ** r)
{
    int discr;
    int ret;
    if (r == NULL) {
        return -1;
    }
    discr = strcmp(pp->targa, (*r)->targa);
    if (discr == 0) {
        ret = removeIntervallo(&((*r)->lint), &(pp->in));
        /**se ho eliminato tutti i permessi (intervalli) devo eliminare anche il nodo relativo*/
        if (ret == 0 && (*r)->lint == NULL) {
            nodo_t *elim = *r;
            /**assegno il figlio destro (del nodo eliminato)
            al posto del nodo da eliminare*/
            (*r) = elim->right;
            /**aggiungo il figlio sinistro all'albero ottenuto*/
            addNodo(r, elim->left);
            free(elim);
        }
        return ret;
    } else {
        if (discr < 0) {
            return removePerm(pp, &((*r)->left));
        } else {
            return removePerm(pp, &((*r)->right));
        }
    }
}
Exemple #3
0
void addAlbero(ramo** albero, ramo* add)
{
    if(add==NULL)
        return;
    addNodo(albero, add->val);
    if(add->left!=NULL)
        addAlbero(albero, add->left);
    if(add->right!=NULL)
        addAlbero(albero, add->right);
}
Exemple #4
0
//aggiunge un nodo, non aggiunge nodi uguali
void addNodo(ramo** albero, int val)
{
    ramo* temp = *albero;
    if(temp==NULL)
    {
        temp=(ramo*) malloc(sizeof(ramo));
        printf("inserisco: %d\n", val);
        temp->val=val;
        temp->left=NULL;
        temp->right=NULL;
        *albero=temp;
    }
    else
    {
        if(val>temp->val)
            addNodo(&temp->right, val);
        else if(val<temp->val)
            addNodo(&temp->left, val);
        }
}
Exemple #5
0
/**
Inserisce nell'albero r il sottoalbero binario add

\param r puntatore all'albero su cui effettura l'inserimento
\param add sottoalbero da inserire

\retval 0 se l'inserimento è andato a buon fine
\retval 1 altrimenti
*/
int addNodo(nodo_t ** r, nodo_t * add)
{
    if (add == NULL) {
        errno = EINVAL;
        return 1;
    }
    if ((*r) == NULL) {
        *r = add;
        return 0;
    } else {
        int discr = strcmp((*r)->targa, add->targa);
        /**il nuovo nodo non deve avere targa uguale a un nodo gia presente*/
        if (discr == 0) {
            errno = EINVAL;
            return 1;
        }
        if (discr < 0) {
            return addNodo(&((*r)->right), add);
        } else
            return addNodo(&((*r)->left), add);
    }

}
Exemple #6
0
MCtree treePolicy(MCtree tree, DATABASE * simulacao, int * flag2){
    int counter[4] = {0};
    float UCT_value = 0.0;
    float max = -1.0;
    int index = 0;
    int count1 = 0, count2 = 0;
    int nc = (simulacao ->nc) - 1;
    int wi = 0, ni = 0, t = 0;
    MAO jogadas[4][40];
    MAO jogada_max = 0;
    memset(jogadas,0,8 * 4 * 40);
	jogadas_possiveis(simulacao,counter,0,jogadas);
    if(nc >= 0){
        count1 = 0;
        while(count1 < counter[nc]){
            for(count2 = 0; count2 < 40; count2++){
                if(tree->nextN[nc][count2] == NULL){
                    tree->nextN[nc][count2] = addNodo(jogadas[nc][count1], tree);
                    simulacao->mao[0] = (simulacao->mao[0]) ^ (jogadas[nc][count1]);
                    if(jogadas[nc][count1] == 0)
                        simulacao->passar++;
                    else{
                        simulacao->passar = 0;
                        simulacao->jogada = jogadas[nc][count1];
                    }
                    if(simulacao->passar == 3){
                        simulacao->nc = 0;
                        simulacao->jogada = 0;
                    }
                    simulacao->usadas[0] = simulacao->usadas[0] | (jogadas[nc][count1]);
                    flag2[0] = 1;
                    return tree->nextN[nc][count2];
                }
                else if((jogadas[nc][count1]) == ((tree->nextN[nc][count2])->estado)){
                    wi = (tree->nextN[nc][count2])->r;
                    ni = (tree->nextN[nc][count2])->t;
                    t = tree->t;
                	UCT_value = (float)(((wi) / (float)(ni)) + (1.3 * (sqrt(log(t) / (ni)))));
                    count1++;
                    if(UCT_value > max){
                        max = UCT_value;
                        index = (nc * 40) + count2;
                        jogada_max = jogadas[nc][count1];
                    }
                    count2 = 40;
                }
            }
    	}
    }
    else{
        for(nc = 0; nc < 4; nc++){
            count1 = 0;
            while(count1 < counter[nc]){
                for(count2 = 0; count2 < 40; count2++){
                    if(jogadas[nc][count1] != 0){
                        if(tree->nextN[nc][count2] == NULL){
                            simulacao->nc = nc + 1;
                            simulacao->passar = 0;
                            simulacao->jogada = jogadas[nc][count1];
                            simulacao->mao[0] = (simulacao->mao[0]) ^ (jogadas[nc][count1]);
                            tree->nextN[nc][count2] = addNodo(jogadas[nc][count1], tree);
                            simulacao->usadas[0] = simulacao->usadas[0] | jogadas[nc][count1];
                            flag2[0] = 1;
                            return tree->nextN[nc][count2];
                        }
                        else if((jogadas[nc][count1])== ((tree->nextN[nc][count2])->estado)){
                            wi = (tree->nextN[nc][count2])->r;
                            ni = (tree->nextN[nc][count2])->t;
                            t = tree->t;
                            UCT_value = (float)(((wi) / (float)(ni)) + (1.3 * (sqrt(log(t) / (ni)))));
                            count1++;
                            if(UCT_value > max){
                                max = UCT_value;
                                index = (nc * 40) + count2;
                                jogada_max = jogadas[nc][count1];
                                simulacao->nc = nc + 1;
                            }
                            count2 = 40;
                        }
                    }
                    else
                        count1++;
                }
            }
        }
    }
    if(jogada_max == 0)
        simulacao->passar++;
    else{
        simulacao->jogada = jogada_max;
        simulacao->passar = 0;
        simulacao->usadas[0] = simulacao->usadas[0] | jogada_max;
    }
    if(simulacao->passar == 3){
        simulacao->nc = 0;
        simulacao->jogada = 0;
    }
    tree = tree->nextN[index/40][index%40];
    simulacao->mao[0] = jogada_max ^ (simulacao->mao[0]);
    return tree;
}
Exemple #7
0
int main()
{
    printf("-----Programma albero-----\n");
    ramo * myAlbero = NULL;
    addNodo(&myAlbero, 17);
    printf("Ver val: %d \n",myAlbero->val);
    //removeNodo(&myAlbero, 17);
    printf("next 2 \n");
    addNodo(&myAlbero, 2);
    printf("next 5 \n");
    addNodo(&myAlbero, 5);
    printf("next 23\n");
    addNodo(&myAlbero, 23);
    printf("next 12 \n");
    addNodo(&myAlbero, 12);
    printf("next\n");
    addNodo(&myAlbero, 37);
    addNodo(&myAlbero, 75);
    int res =profonditNodo(myAlbero, 75, 0);
    printf("Profondità: %d\n", res);
    int res2 = existNodo(myAlbero, 12);
    printf("12 esiste?: %d --\n", res2);

    ramo * myAlbero2 = NULL;
    addNodo(&myAlbero2, 3);
    addNodo(&myAlbero2, 14);
    addNodo(&myAlbero2, 1);
    addAlbero(&myAlbero, myAlbero2);
    StampaAlbero(myAlbero);
    fStampaAlbero(myAlbero);

    printf("\n\n\n\n\n\ Ora si fa sul serio:\nCreo due alberi uguali e controllo con il metodo l'ugualianza a una data profondità:");
    ramo * a1 = NULL;
    addNodo(&a1, 15);
    addNodo(&a1, 7);
    addNodo(&a1, 5);
    addNodo(&a1, 11);
    addNodo(&a1, 3);
    addNodo(&a1, 6);
    addNodo(&a1, 8);
    addNodo(&a1, 13);
    addNodo(&a1, 19);
    addNodo(&a1, 17);
    addNodo(&a1, 16);
    addNodo(&a1, 18);
    addNodo(&a1, 23);
    addNodo(&a1, 21);
    addNodo(&a1, 25);

    ramo * a2 = NULL;
    addNodo(&a2, 15);
    addNodo(&a2, 7);
    addNodo(&a2, 5);
    addNodo(&a2, 11);
    addNodo(&a2, 3);
    addNodo(&a2, 6);
    addNodo(&a2, 8);
    addNodo(&a2, 13);
    addNodo(&a2, 19);
    addNodo(&a2, 17);
    addNodo(&a2, 16);
    addNodo(&a2, 18);
    addNodo(&a2, 23);
    addNodo(&a2, 21);
    addNodo(&a2, 25);
    printf("\n\n\n\nsono uguali: %d", ProfonditaUguale(a1, a2, 2));

    return 0;
}
Exemple #8
0
int main()
{
    printf("inizio\n");
    Albero* myalbero=NULL;
    addNodo(&myalbero, 15);
    addNodo(&myalbero, 10);
    addNodo(&myalbero, 8);
    addNodo(&myalbero, 5);
    addNodo(&myalbero, 9);
    addNodo(&myalbero, 25);
    addNodo(&myalbero, 19);
    addNodo(&myalbero, 29);
    printf("fine inserimento\n");
    lista* l1 = AllocaLista(myalbero, 1);
    printf("fine allocalista\n");
    printLista(l1);

    Albero* myalbero2=NULL;
    addNodo(&myalbero2, 15);
    addNodo(&myalbero2, 10);
    addNodo(&myalbero2, 8);
    addNodo(&myalbero2, 5);
    addNodo(&myalbero2, 9);
    addNodo(&myalbero2, 25);
    addNodo(&myalbero2, 19);
    addNodo(&myalbero2, 29);
    addNodo(&myalbero2, 28);
    addNodo(&myalbero2, 31);
   // printf("verificalivelli: %d",verificaLivello(myalbero, myalbero2, 3));
    printf("\n\nfine Programma\n");
    ModificaFile(myalbero,"livelli.txt");
    return 0;
}