TÓPICO
PROBLEM 1466 - URI Fórum 1.0
Este tópico foi resolvido e não pode receber novas respostas.
-
thalyson004 respondido 9 years ago
Obrigado, o erro estava exatamente nesse 0 no valor, foi só trocar as checagens de valor para id. Valeu :D
-
jjaca0 respondido 8 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"); } }
-
wpstudart respondido 9 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; }
-
crbonilha respondido 9 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
-
thalyson004 respondido 9 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º