예제 #1
0
파일: nodos.cpp 프로젝트: gurroz/Memori
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;
}
예제 #2
0
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);
}
예제 #3
0
파일: Trie.cpp 프로젝트: wdalmorra/Trie
// 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++;
    }
}
예제 #4
0
		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++;
			}
		}
예제 #5
0
		void imprimir() {
			Nodo *aux = first;
			while(aux != NULL) {
				cout << aux->getNum() << endl;
				aux = aux->getNext();
			}
		}
예제 #6
0
void Programa::recorridoDeLaLista()
{
    for (Nodo *ix = mInicio; ix != NULL; ix = ix->getSiguiente()) {
        cout << ix->getNumero() << ' ';
    }
    cout << endl;
}
예제 #7
0
파일: Pila.cpp 프로젝트: bran921007/libros
Nodo* Pila::buscar(string categoria) {
	Nodo* buscar = getUltimoElemento();
	while((buscar != NULL)and(buscar->getCategoria() != categoria))
	{
		buscar = buscar->getAnterior();
	}
	return buscar;
}
예제 #8
0
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;
}
예제 #9
0
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();
        }
    }
}
예제 #10
0
void Programa::recorreReversa() const
{
    Nodo *ix = mFinal;
    while (ix != NULL) {
        cout << ix->getNumero() << ' ';
        ix = ix->getAnterior();
    }
    cout << endl;
}
예제 #11
0
Nodo *Programa::getX(int x) const
{
    for (Nodo *ix = mInicio; ix != NULL; ix = ix->getSiguiente()) {
        if (ix->getNumero() == x) {
            return ix;
        }
    }
    return NULL;
}
예제 #12
0
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;
}
예제 #13
0
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, "");
	}
예제 #14
0
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;
	}
	
}
예제 #15
0
파일: Main.cpp 프로젝트: willkraemer/ED
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;
}
예제 #16
0
파일: Lista.cpp 프로젝트: SuEric/ADA
// 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;
}
예제 #17
0
void Programa::creaFinal()
{
    int numero;
    cout << "numero: ";
    cin >> numero;
    mFinal = new Nodo(numero);
    if (!mInicio) {
        mInicio = mFinal;
    } else {
        mInicio->setSiguiente(mFinal);
        mFinal->setAnterior(mInicio);
    }
}
예제 #18
0
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;
}
예제 #19
0
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;
}
예제 #20
0
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;
}
예제 #21
0
		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++;
			}
		}
예제 #22
0
파일: Trie.cpp 프로젝트: wdalmorra/Trie
// 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;
}
예제 #23
0
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);
}
예제 #24
0
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();
		}
	}
}
예제 #25
0
  /** 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;
  }
예제 #26
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;
}
예제 #27
0
 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);
 }
예제 #28
0
파일: Trie.cpp 프로젝트: wdalmorra/Trie
// 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++;
    }
}
예제 #29
0
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);
    }
}
예제 #30
0
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, "");
	}