void add(lista **principal, char c) { lista *tmp; tmp = *principal; if(*principal == NULL) { *principal = nodo(c); } else { while(tmp->siguiente != NULL) { tmp=tmp->siguiente; } tmp->siguiente = nodo(c); } }
// GUARDAR XmlNodo Jerarquia::guardarXmlCOMP() { XmlNodo nodo("jerarquia"); this->agregarPropiedadesXmlCOMP(&nodo); this->agregarCodigoEntidadGeneralXmlCOMP(&nodo); this->agregarCodigosEntidadEspecializadasXmlCOMP(&nodo); return nodo; }
// Intenta moverse en una direccion int intentar(paso_t ** S, char D) { int c; c = camino(*S, D); // Encontramos la salida if(c == SALIDA) { printf("Encontramos la salida!\n"); } // El camino esta cerrado else if (c == CERRADO) { cerrar(*S, D); // Si no se puede seguir, cerramos printf("Intento hacia %c, camino cerrado.\n", D); } // Se puede continuar else { cerrar(*S, D); avanzar(S, nodo()); cerrar(*S, opuesto(D)); printf("Avanzando hacia %c...\n", D); } return c; }
// Soluciona la mazmorra int solucion(void) { int i; paso_t * L = NULL; paso_t * p = NULL; // Agrego paso inicial, ingresando al laberinto hacia el norte p = nodo(); cerrar(p, 'S'); avanzar(&L,p); // Ciclo hasta salir del laberinto do { usleep(PAUSA); if(L==NULL) { printf("Volvimos a la entrada, el laberinto no tiene salida!\n"); exit(1); } if(L->N == ABIERTO) { i=intentar(&L,'N'); } else if (L->S == ABIERTO) { i=intentar(&L,'S'); } else if (L->O == ABIERTO) { i=intentar(&L, 'O'); } else if (L->E == ABIERTO) { i=intentar(&L, 'E'); } else { printf("No se puede avanzar, retrocediendo un paso...\n"); retroceder(&L); } } while (i!=SALIDA); return 0; }
int btree::dividir(int pos,int tipo){ int pa=pos; if(tipo==1){ indice temp = nodos[pos].removemitad(); nodo tempiz; nodo tempder; for(int i=0;i<31;i++){ if(i<30){ tempiz.setIndice(nodos[pos].getData()[i],i); tempiz.setSon(nodos[pos].getSons()[i],i); }else{ tempiz.setSon(nodos[pos].getSons()[i],i); } } int j =30; for(int i=0;i<32;i++){ if(i<31){ tempder.setIndice(nodos[pos].getData()[j],i); tempder.setSon(nodos[pos].getSons()[j],i); }else{ tempder.setSon(nodos[pos].getSons()[j],i); } j++; } nodos.removeAt(pos); nodos.insert(pos,tempiz); nodos.append(tempder); int nuevaconeccion = nodos.count()-1; int pospadre=-1; for(int i=0;i<nodos.count();i++){ for(int j=0;j<nodos[i].getSons().count();j++){ if(nodos[i].getSons()[j]==pos){ pospadre=i; } } } if(pospadre==-1){ nodos.append(nodo()); nodos[nodos.count()-1].setIndice(temp,0); nodos[nodos.count()-1].setSon(pos,0); nodos[nodos.count()-1].setSon(nuevaconeccion,1); pa=nodos.count()-1; }else{ if(nodos[pospadre].getData()[62].getLlave()==""){ int lugar = nodos[pospadre].lugardisponible(temp,1); nodos[pospadre].insertindice(temp,lugar); nodos[pospadre].insertson(nuevaconeccion,lugar+1); pa=pospadre; } else{ int lugarhijo = nodos[pospadre].inserttempdata(temp,1); nodos[pospadre].inserttempson(lugarhijo,nuevaconeccion); dividir(pospadre,1); } } }else{ indice temp = nodos[pos].removemitad(); nodo tempiz; nodo tempder; for(int i=0;i<31;i++){ if(i<30){ tempiz.setIndice(nodos[pos].getData()[i],i); tempiz.setSon(nodos[pos].getSons()[i],i); }else{ tempiz.setSon(nodos[pos].getSons()[i],i); } } int j =30; for(int i=0;i<32;i++){ if(i<31){ tempder.setIndice(nodos[pos].getData()[j],i); tempder.setSon(nodos[pos].getSons()[j],i); }else{ tempder.setSon(nodos[pos].getSons()[j],i); } j++; } nodos.removeAt(pos); nodos.insert(pos,tempiz); nodos.append(tempder); int nuevaconeccion = nodos.count()-1; int pospadre=-1; for(int i=0;i<nodos.count();i++){ for(int j=0;j<nodos[i].getSons().count();j++){ if(nodos[i].getSons()[j]==pos){ pospadre=i; } } } if(pospadre==-1){ nodos.append(nodo()); nodos[nodos.count()-1].setIndice(temp,0); nodos[nodos.count()-1].setSon(pos,0); nodos[nodos.count()-1].setSon(nuevaconeccion,1); pa=nodos.count()-1; }else{ if(nodos[pospadre].getData()[62].getLlave()==""){ int lugar = nodos[pospadre].lugardisponible(temp,2); nodos[pospadre].insertindice(temp,lugar); nodos[pospadre].insertson(nuevaconeccion,lugar+1); pa=pospadre; } else{ int lugarhijo = nodos[pospadre].inserttempdata(temp,2); nodos[pospadre].inserttempson(lugarhijo,nuevaconeccion); dividir(pospadre,2); } } } return pa; }
int btree::insertIndice(indice in,int pos,int tipo){ int pa = pos; if(tipo==1){ if(nodos.count()>0){ if(!(nodos[pos].getSons()[0]==-1)){ for(int i=0;i<nodos[pos].getData().count();i++){ if(nodos[pos].getData()[i].getLlave()!=""){ if(nodos[pos].getHijoIzquiero(i)!=-1 && in.getLlave()<nodos[pos].getData()[i].getLlave()){ insertIndice(in,nodos[pos].getHijoIzquiero(i),1); }else if(i==nodos[pos].getData().count()-1){ insertIndice(in,nodos[pos].getHijoDerecho(i),1); } }else{ insertIndice(in,nodos[pos].getHijoIzquiero(i),1); break; } } }else if(nodos[pos].getData()[61].getLlave()==""){ nodos[pos].insertindice(in,nodos[pos].lugardisponible(in,1)); }else{ int lugarhijo = nodos[pos].inserttempdata(in,1); nodos[pos].inserttempson(lugarhijo,-1); pa = dividir(pos,1); } }else{ nodos.append(nodo()); nodos[pos].setIndice(in,0); } }else{ if(nodos.count()>0){ if(!(nodos[pos].getSons()[0]==-1)){ for(int i=0;i<nodos[pos].getData().count();i++){ if(nodos[pos].getData()[i].getLlave()!=""){ if(nodos[pos].getHijoIzquiero(i)!=-1 && in.getLlave().toInt()<nodos[pos].getData()[i].getLlave().toInt()){ insertIndice(in,nodos[pos].getHijoIzquiero(i),2); }else if(i==nodos[pos].getData().count()-1){ insertIndice(in,nodos[pos].getHijoDerecho(i),2); } }else{ insertIndice(in,nodos[pos].getHijoIzquiero(i),2); break; } } }else if(nodos[pos].getData()[61].getLlave()==""){ nodos[pos].insertindice(in,nodos[pos].lugardisponible(in,2)); }else{ int lugarhijo = nodos[pos].inserttempdata(in,2); nodos[pos].inserttempson(lugarhijo,-1); pa = dividir(pos,2); } }else{ nodos.append(nodo()); nodos[pos].setIndice(in,0); } } return pa; }
void build_digraph(Digrafo & g) { g.insert_arc(nodo(g, "A"), nodo(g, "B")); g.insert_arc(nodo(g, "A"), nodo(g, "I")); g.insert_arc(nodo(g, "A"), nodo(g, "F")); g.insert_arc(nodo(g, "B"), nodo(g, "F")); g.insert_arc(nodo(g, "C"), nodo(g, "F")); g.insert_arc(nodo(g, "C"), nodo(g, "G")); g.insert_arc(nodo(g, "D"), nodo(g, "H")); g.insert_arc(nodo(g, "F"), nodo(g, "I")); g.insert_arc(nodo(g, "F"), nodo(g, "J")); g.insert_arc(nodo(g, "G"), nodo(g, "J")); g.insert_arc(nodo(g, "H"), nodo(g, "J")); g.insert_arc(nodo(g, "H"), nodo(g, "K")); g.insert_arc(nodo(g, "H"), nodo(g, "L")); g.insert_arc(nodo(g, "I"), nodo(g, "P")); g.insert_arc(nodo(g, "J"), nodo(g, "M")); g.insert_arc(nodo(g, "J"), nodo(g, "N")); g.insert_arc(nodo(g, "K"), nodo(g, "N")); g.insert_arc(nodo(g, "K"), nodo(g, "O")); g.insert_arc(nodo(g, "L"), nodo(g, "O")); g.insert_arc(nodo(g, "L"), nodo(g, "S")); g.insert_arc(nodo(g, "M"), nodo(g, "P")); g.insert_arc(nodo(g, "M"), nodo(g, "Q")); g.insert_arc(nodo(g, "N"), nodo(g, "R")); g.insert_arc(nodo(g, "O"), nodo(g, "R")); g.insert_arc(nodo(g, "O"), nodo(g, "S")); }