TOPIC

PROBLEM 1466 - URI Fórum 1.0

URI Online Judge asked 6 years ago

URI Online Judge Fórum 1.0

MOD

This topic was solved and cannot recieve new replies.

  • Juca Jaca replied 4 years ago

    Runtime Error. Alguma sugestão ?

    #include<bits/stdc++.h>
    
    using namespace std;
    
    struct no
    {
        struct no *esq;
        struct no *dir;
        int dado;
    };
    typedef struct no *Arvore;
    
    void insertNode(Arvore *t,int d)
    {
        if(*t == NULL)
        {
            *t = (struct no *)malloc(sizeof(struct no));
            (*t)->esq = NULL;
            (*t)->dir = NULL;
            (*t)->dado = d;
        }
        else
        {
            if((*t)->dado > d)
                insertNode(&(*t)->esq,d);
            else
                insertNode(&(*t)->dir,d);
        }
    }
    
    int grade[520][520];
    
    void geraMatrizAdj(Arvore A,int grade[520][520])
    {
         if(A != NULL)
         {
             if(A->esq != NULL)
                grade[A->dado][A->esq->dado] = 1;
             if(A->dir != NULL)
                grade[A->dado][A->dir->dado] = 1;
    
            geraMatrizAdj(A->esq,grade);
            geraMatrizAdj(A->dir,grade);
         }
    }
    void ImprimeNiveis(Arvore A,int grade[520][520],int raiz)
    {
         queue<int>fila;
    
        fila.push(raiz);
    
        printf("%d",raiz);
    
        while(!fila.empty())
        {
            int p = fila.front();
            fila.pop();
    
            for(int i = 0;i<=500;i++)
            {
                if(grade[p][i])
                {
                    printf(" %d",i);
                    fila.push(i);
                }
            }
        }
    
    }
    
    int main()
    {
    
        int n;
        int grade[520][520];
        scanf("%d",&n);
    
        for(int p = 0 ; p < n ;p++)
        {
            int raiz;
            Arvore A = NULL;
            int q;
    
            scanf("%d",&q);
            for(int i  = 0 ; i < q ; i++)
            {
                int x;
    
                scanf("%d",&x);
    
                if(i == 0)
                    raiz = x;
                insertNode(&A,x);
            }
            for(int j = 0 ; j <= 500 ; j++)
                memset(grade[j],0,sizeof(grade[j]));
    
             geraMatrizAdj(A,&(*grade));
    
             printf("Case %d:\n",p+1);
             ImprimeNiveis(A,grade,raiz);
             printf("\n\n");
        }
    
    }
  • William Picon Studart replied 6 years ago

    Alguém tem alguns casos de testes pra me passar? Meu código aparenta estar certo, mas não consigo entender o por que apenas 40% dele está certo (dos casos de teste).

    Segue o código, por favor alguém me dê uma luz rs

    #include <stdio.h>
    #include <iostream>
    #include <queue>
    using namespace std;
    
    bool primeiro = true;
    
    struct node {
    
        node(int _data){
            data = _data;
            left = right = NULL;
        }
    
        int data;
        node *left;
        node *right;
    };
    
    node * insere (node* no, char dado){
        if (!no)
            return new node(dado);
        else if (dado < no->data)
            no->left = insere(no->left, dado);
        else if (dado > no->data)
            no->right = insere(no->right, dado);
    
        return no;
    }
    
    void porNivel (node *no){
    
        queue<node*> fila;
        fila.push(no);
    
        while (!fila.empty()) {
    
            node * n = fila.front();
            fila.pop();
    
            if (!primeiro)
                cout << " " << n->data;
            else {
                cout << n->data;
                primeiro = false;
            }
            if (n -> left)
                fila.push(n->left);
            if (n -> right)
                fila.push(n->right);
        }
    
    }
    
    int main(int argc, const char * argv[])
    {
    
        int testCases;
        scanf("%d", &testCases);
    
        for (int j = 1; j <= testCases; j++){
            int numElem;
            int elem;
            scanf("%d", &numElem);
            scanf("%d", &elem);
            node *no = new node(elem);
            for (int i = 1; i < numElem; i++) {
                scanf("%d", &elem);
                insere(no, elem);
            }
            printf("Case %d:\n", j);
            primeiro = true;
            porNivel(no);
            cout << endl;
            cout << endl;
        }
    
        return 0;
    }
  • Thalyson Nepomuceno replied 6 years ago

    Obrigado, o erro estava exatamente nesse 0 no valor, foi só trocar as checagens de valor para id. Valeu :D

  • Cristhian Bonilha replied 6 years ago

    No enunciado do exercício diz: N inteiros distintos e não negativos. Isso significa que o 0 é um candidato.

    E justamente esse 0 faz seu algoritmo se comportar de forma estranha:

    1
    4
    5 0 3 4
  • Thalyson Nepomuceno replied 6 years ago

    Aew galera do mal. Fiz esse código fácil, porém n está passando nem a pau '-'. Eu dei uma olhada e não vi erro na lógica. Alguém poderia me arrumar algum caso de teste que o algoritmo falhe?

    ACC- Rank 9º