Nodos::Nodos(vector<Nodo*> nds) { num_nodos = nds.size(); num_nodos_validos = nds.size(); nodos = nds; double mx = -1*numeric_limits<float>::max(); double mix = numeric_limits<float>::max(); double my = -1*numeric_limits<float>::max(); double miy = numeric_limits<float>::max(); double mz = -1*numeric_limits<float>::max(); double miz = numeric_limits<float>::max(); for(int i = 0; i < (int)nds.size(); ++i){ Nodo* n = nds[i]; if( n!= 0){ Punto p = n->getPunto(); double x = p.getX(); double y = p.getY(); double z = p.getZ(); if(x>mx) mx = x; if(x<mix) mix = x; if(y>my) my = y; if(y<miy) miy = y; if(z>mz) mz = z; if(z<miz) miz = z; } } this->maxx = mx; this->minx = mix; this->maxy = my; this->miny = miy; this->maxz = mz; this->minz = miz; nodos_marcados = NULL; }
void Programa::insertaDespuesDeX() { int x; cout << "x: "; cin >> x; Nodo *ix = getX(x); if (!ix) { cout << "no hay x = " << x << endl; return; } int numero; cout << "numero: "; cin >> numero; Nodo *nodo = new Nodo(numero); if (ix == mFinal) { mFinal->setSiguiente(nodo); nodo->setAnterior(mFinal); mFinal = nodo; return; } Nodo *A = ix->getSiguiente(); ix->setSiguiente(nodo); nodo->setAnterior(ix); nodo->setSiguiente(A); A->setAnterior(nodo); }
// Método que verifica se um string está na trie, retorna 1 caso estejae -1 caso contrário int Trie::buscaString(string word) { int i = 0; Nodo* Aux; // Nodo auxiliar Aux = raiz; // que recebe a raiz da trie word = converteString(word); // Converte todas as letras para maiúsculas while(word[i] != '\0') // enquanto não é o fim da string continua procurando { Aux = Aux->getNodo(word[i]); // auxiliar recebe o nodo pra onde aponta o caracter da string if (Aux != NULL) // Se esse nodo não for nulo é porque até o momento existe a string então tem que seguir procurando { if ( word[i] == '$') // Caso chegou no caracter de fim de string é porque a string está na trie { return 1; // Então retorna 1 } // Se nao for caracter de fim de string apenas segue pro proximo caracter } else // Se o nodo for nulo então é porque não tem o caracter q ta procurando logo a string toda nao da na trie { return -1; // retorna -1 } i++; } }
void agregar(Nodo *a, int pos) { if(first == NULL) { first = a; size++; }else if(pos == 1) { agregarInicio(a); }else if(pos > size) { agregarFinal(a); }else { Nodo *aux; aux = first; for(int i = 0; i < pos-2; i++) { aux = aux->getNext(); } //Nodo* siguiente; //Nodo* anterior; //anterior = aux; //siguiente = aux->getNext(); //a->setNext(siguiente); //anterior->setNext(a); a->setNext(aux->getNext()); aux->setNext(a); size++; } }
void imprimir() { Nodo *aux = first; while(aux != NULL) { cout << aux->getNum() << endl; aux = aux->getNext(); } }
void Programa::recorridoDeLaLista() { for (Nodo *ix = mInicio; ix != NULL; ix = ix->getSiguiente()) { cout << ix->getNumero() << ' '; } cout << endl; }
Nodo* Pila::buscar(string categoria) { Nodo* buscar = getUltimoElemento(); while((buscar != NULL)and(buscar->getCategoria() != categoria)) { buscar = buscar->getAnterior(); } return buscar; }
Nodo* Huffman::crearNodo(int a, int x) { Nodo* nodoNuevo = new Nodo(); nodoNuevo->setFrecuencia(x); nodoNuevo->setNumero(a); nodoNuevo->setHijoDerecho(NULL); nodoNuevo->setHijoIzquierdo(NULL); return nodoNuevo; }
void Solucion::Generar(){ Nodo* n = _nSol; if (n != NULL){ while (n->GetPadre() != NULL){ _costo += _costMat->Get(n->GetPadre()->GetID() - 1, n->GetID() - 1); n = n->GetPadre(); } } }
void Programa::recorreReversa() const { Nodo *ix = mFinal; while (ix != NULL) { cout << ix->getNumero() << ' '; ix = ix->getAnterior(); } cout << endl; }
Nodo *Programa::getX(int x) const { for (Nodo *ix = mInicio; ix != NULL; ix = ix->getSiguiente()) { if (ix->getNumero() == x) { return ix; } } return NULL; }
bool ArbolB<g>::remove(int valor){ Nodo *aux = raiz; while(aux) if(aux->remove(valor)){ if(aux->tieneHijos()) aux = aux->mayorDeLosMenores(); rebalancear(aux); --n; return true; }else aux = aux->getSon(valor); return false; }
void AlmacenaToComsol_1::aplicar(Malla *malla, string filename){ //Lineas necesarias para que scanf lea archivo en computadores seteados en otro lenguaje. setlocale(LC_NUMERIC, "POSIX"); FILE *archivo_x = fopen(filename.c_str(),"w"); char separador1[32] = "% Coordinates\n"; fprintf(archivo_x,"%s",separador1); Nodo *nodo; int* nuevoIndiceNodos=new int[malla->getMaxIndiceNodos()+1]; int nlinea=0; for(int i=0; i<=malla->getMaxIndiceNodos(); i++) { nodo = malla->getNodo(i); if(nodo != NULL) { fprintf(archivo_x,"%f %f %f\n",nodo->getPunto().getX(),nodo->getPunto().getY(),nodo->getPunto().getZ()); nuevoIndiceNodos[i]=nlinea; nlinea++; } } ostringstream myStream; myStream << "% Elements (" << malla->getTipoMalla() << ")\n"; string str_separador2 = myStream.str(); const char *separador2 = str_separador2.c_str(); fprintf(archivo_x,"%s",separador2); Cara *c; vector<int> ind_nodos; for(int i=0; i<=malla->getMaxIndiceCaras(); i++) { c = malla->getCara(i); if(c != 0) { ind_nodos = c->getNodos(); //Nota: Se invierte el orden de insercion de los puntos, para que las normales queden seteadas correctamente. //ya que en el archivo cms_1 los nodos estan al reves, dejando las normales hacia adentro. //for(int j=c->getNumElem()-1; j>=0 ;--j) { // Por bug archivos de entrada for(int j=0; j<c->getNumElem(); ++j) { // así debiera ser char *delimitador = " "; //if(j == 0) // Por bug archivos de entrada if(j == c->getNumElem()-1) // así debiera ser delimitador = "\n"; fprintf(archivo_x,"%d%s",nuevoIndiceNodos[ind_nodos[j]]+1,delimitador); } } } delete nuevoIndiceNodos; fclose(archivo_x); setlocale(LC_NUMERIC, ""); }
void Stack::LenStack() { cout << "Stack" << endl; Nodo * pila = Pila; cout << "|---- data: " << pila->getData() << endl; while (pila->getLink()!=NULL) { pila = pila->getLink(); cout << "|---- data: " << pila->getData() << endl; } }
int main(int argc, char** argv) { //int teste[] = {1,2,6,8,12,15,20,24,25,29,40,50,60,70,80,90,91,92,93,94,95,96}; montarArray(argv[1]); raiz = *raiz.construir(0,100,numeros); /*std::cout << "valor " << raiz.valor << " esquerda " << raiz.filhoEsquerda->valor << " direita " << raiz.filhoDireita->valor << std::endl;*/ raiz.buscar(&raiz,50,100); return 0; }
// Imprimir la Listaa void Lista::imprimir() { Nodo *temp = inicio; if (!inicio) { cout << "La Listaa está vacía " << endl; } else { while (temp) { temp->imprimir(); if (!temp->sig) cout << "NULL"; temp = temp->sig; } } cout << endl << endl; }
void Programa::creaFinal() { int numero; cout << "numero: "; cin >> numero; mFinal = new Nodo(numero); if (!mInicio) { mInicio = mFinal; } else { mInicio->setSiguiente(mFinal); mFinal->setAnterior(mInicio); } }
void Programa::insertaAlFinal() { if (!mFinal) { cout << "no existe final" << endl; return; } int numero; cout << "numero: "; cin >> numero; Nodo *nodo = new Nodo(numero); nodo->setAnterior(mFinal); mFinal->setSiguiente(nodo); mFinal = nodo; }
void Programa::insertaAlInicio() { if (!mInicio) { cout << "no existe inicio" << endl; return; } int numero; cout << "numero: "; cin >> numero; Nodo *nodo = new Nodo(numero); nodo->setSiguiente(mInicio); mInicio->setAnterior(nodo); mInicio = nodo; }
bool Nodo::operator<(const Nodo &nodo) const { unsigned int Score = 0; unsigned int hScore = 0; Score = nodo.getGScore() + nodo.getHScore(); if ((HScore + GScore) < Score) { return true; } else { Score = nodo.getHScore(); if ((HScore < Score)&&(Score==(GScore+HScore))) { return true; } } return false; }
void agregarFinal(Nodo *a) { if(first == NULL) { //La lista esta vacia first = a; size++; }else { Nodo *aux; aux = first; while(aux->getNext() != NULL) { // Mientras haya un nodo despues aux = aux->getNext(); } aux->setNext(a); size++; } }
// Método que encontra a maior string que se pode encontrar na trie, não necessariamente indo até o fim dela string Trie::buscaMaiorString(string word) { int i = 0; Nodo* aux = raiz; // Nodo auxiliar que recebe a raiz da trie string aux2; // string auxiliar while(word[i] != '\0') // Enquanto não for o fim da string segue procurando { aux = aux->getNodo(word[i]); // Nodo auxiliar recebe o próximo nodo correspondente ao caracter if (aux == NULL) // Se ele for nulo é porque a maior substring encontrada foi a lida a agora break; // Logo sai do laço aux2 += word[i]; // Se não for nulo então existe aquele caracter, logo concatena ele na string auxiliar e segue procurando pelo próximo caracter i++; } return aux2; }
void Programa::eliminaAntesDeX() { int x; cout << "x: "; cin >> x; Nodo *ix = getX(x); if (!ix) { cout << "no hay x = " << x << endl; return; } Nodo *A = ix->getAnterior(); Nodo *A2 = A->getAnterior(); A2->setSiguiente(ix); ix->setAnterior(A2); }
void Tree::recorrer(Nodo* nodo) { cout << nodo->getNombre() << endl <<endl; if(nodo->getNumeroHijo() > 0) { Nodo* n = nodo->getHijo(); while(n != NULL) { recorrer(n); n = n->getSiguiente(); } } }
/** Retornar el indice de la cadena, si no existe retornar 0*/ unsigned int Trie::getIndice( string cadena ){ //Obtener el nodo raiz del primer caracter de la cadena Nodo * nodo = this->getInicio(cadena[0]); //Obtener el substring de la cadena string subCadena = getSubstring(cadena); //Recorrer toda la cadena, hasta que no haya hijos o se acabe while(nodo != NULL && subCadena.length() > 0){ nodo = nodo->getNodoHijoByCaracter(subCadena[0]); subCadena = getSubstring(subCadena); } //Si termino con un nodo, y recorrio toda la cadena retornar el indice if (nodo != NULL && subCadena.length() == 0) return nodo->getIndice(); return 0; }
int BusquedaA::getIndiceNodoFMenor(QList<Nodo *> colaPrioridad) { Nodo* nodo; int idx = 0; int fMenor = colaPrioridad.at(0)->getf(); for(int i = 1; i < colaPrioridad.size(); i++) { nodo = colaPrioridad.at(i); if(fMenor > nodo->getf()){ idx = i; fMenor = nodo->getf(); } } return idx; }
forn(q,Q) { char op[8]; scanf("%s", op); if (op[0] == 'I') { int x,y; scanf("%d%d", &x,&y); x--; // Esto es parecido (pero bien diferente :P) al codigo de insertarAUnladoPointer, pero empezando en p en lugar de en root // De entrada me comi que era hacer lo mismo exacto que insertarAUnLado, y pegue WA. // Y luego me comi otro WA por olvidarme la linea p = p->h(0); :P // Moraleja: esto seria bastante mas error prone que el split obvio. Nodo<Datos> *p = iesimo(x, t), *nodo = new Nodo<Datos>(y); int lado = 0; if (p->h(0)) { p = p->h(0); lado = 1; while (p->h(1)) p = p->h(1); } p->hang(lado, nodo); nodo->flotar(); t.reroot(); } else if (op[0] == 'D') { int x; scanf("%d", &x); x--; t.erasePointer(iesimo(x, t)); } else if (op[0] == 'R') { int x,y; scanf("%d%d", &x, &y); x--; Nodo<Datos> *p = iesimo(x, t); p->dat.x = y; p->fullUpdate(); } else if (op[0] == 'Q') { int x,y; scanf("%d%d", &x,&y); x--; assert(x < y); Treap<Datos> t2,t3; t.splitPointer(iesimo(x, t), t2); t2.splitPointer(iesimo(y-x, t2), t3); printf("%d\n", t2.root->dat.bestSum); t.merge(t2); t.merge(t3); } else assert(false); }
// Método que insere um string na trie void Trie::insereString(string word) { int i = 0; Nodo* Aux; // Nodo auxiliar Aux = raiz; // que recebe a raiz da trie word = converteString(word); // Converte todas as letras para maiusculas while(word[i] != '\0') // enquanto nao é o fim da string vai adicionando { if (Aux->getNodo(word[i]) == NULL) // Se o nodo for nulo é porque ainda não foi inserido um prefixo igual { Aux->insere(word[i]); // Nesse caso insere um nodo com este prefixo } Aux = Aux->getNodo(word[i]); // E o nodo auxiliar desce um nodo na hierarquia da trie i++; } }
void ListaEnlazada<T>:: eliminarDelFinal() { Nodo<T> *tempo = this->primerNodo; if(estaVacia()) { cout << "NO HAY ELEMENTOS EN LA LISTA" << endl; } else { while(tempo->get_siguiente() != this->ultimoNodo) { tempo = tempo->get_siguiente(); } this->ultimoNodo = tempo; this->ultimoNodo->set_siguiente(NULL); } }
void AlmacenaToOff::aplicar(Malla *malla, string filename){ //Lineas necesarias para que scanf lea archivo en computadores seteados en otro lenguaje. setlocale(LC_NUMERIC, "POSIX"); FILE *archivoSalida = fopen(filename.c_str(),"w"); fprintf(archivoSalida,"OFF\n"); fprintf(archivoSalida,"%d %d %d\n",malla->getNumNodos(),malla->getNumCaras(),malla->getNumArcos()); Nodo *nodo; int* nuevoIndiceNodos=new int[malla->getMaxIndiceNodos()+1]; int nlinea=0; for(int i=0; i<=malla->getMaxIndiceNodos(); i++) { nodo = malla->getNodo(i); if(nodo != NULL) { fprintf(archivoSalida,"%f %f %f\n",nodo->getPunto().getX(),nodo->getPunto().getY(),nodo->getPunto().getZ()); nuevoIndiceNodos[i]=nlinea; nlinea++; } } Cara *c; vector<int> ind_nodos; vector<int> ind_arcos; for(int i=0; i<=malla->getMaxIndiceCaras(); i++) { c = malla->getCara(i); if(c != 0) { ind_nodos = c->getNodos(); ind_arcos = c->getArcos(); fprintf(archivoSalida,"%d ",c->getNumElem()); double conc_prom = 0; for(int j=0; j<(int)ind_nodos.size(); j++) { conc_prom = conc_prom + malla->getNodo(ind_nodos[j])->getConcentracion(); fprintf(archivoSalida,"%d ",nuevoIndiceNodos[ind_nodos[j]]); } fprintf(archivoSalida,"\n"); } } delete nuevoIndiceNodos; fclose(archivoSalida); setlocale(LC_NUMERIC, ""); }