elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / problema con recursividad + punteros + TRIE, PLAIN C en: 22 Octubre 2012, 19:32 pm
buenas, estoy intentando de crear una especie de estructura trie en c... tengo la siguiente estructura

Código
  1. typedef struct
  2. {
  3. int hijo;// este es un bool de si tiene o no hijos
  4. int valor;//valor de la posicion
  5. struct Numero* hijo[101];//los hijos(son 101 porque estoy haciendo un trie de 100num)
  6. int existe;//si ya se proceso este hijo.. o si hay data adentro
  7. }Numero;
  8.  

que es lo que quiero hacer con esta estructura?
quiero todas las combinaciones que se hicieron en una base de datos...
de 3 numeros, de 2 numeros y de 1 numero... con numeros del 1-100..
lo que quiero es tomar las jugadas, agregarlas o aumentarle el valor guardado...

lo que hago es sacar los datos, los ordeno de menor a mayor, para que no aparescan permutaciones, solo combinaciones...

mi main tiene esto:
Código
  1. int main()
  2. {
  3. Numero temp[101];
  4. Numero *combinaciones=temp;
  5. int cn;//cantidad de numeros;
  6. scanf("%i",&cn);
  7. int tempi[cn+1];
  8. int c1;
  9. int c;
  10. int *numeros=tempi;
  11. for(c1=0;c1<cn;c1++)
  12. scanf("%i",&numeros[c1]);
  13. organizar(&numeros,cn);
  14. agregar(&(*combinaciones)[(*numeros)[0]],&numeros,1,cn,100);
  15. return 0;
  16. }

ok, les explico hasta aqui(que funciona):

tengo 5 numeros:
20 15 3 85 63

los organizo de menor a mayor:
3 15 20 63 85

quiero agregarla a el trie, entonces entro al arreglo
entro al metodo por el primero, en este el 3

el metodo recursivo es el siguiente:


Código
  1. void agregar(Numero* n,int* valores[],int posicion,int length,int monto)
  2. {
  3. //aqui termina la recursividad... cuando llego a la ultima posicion del arreglo
  4. if(posicion==length)
  5. {
  6. printf("agregado con exito");
  7. return;
  8. }
  9. //digo que ese hijo existe
  10. n->existe=1;
  11. //si no quedan mas hijos.. le sumo el monto que tengo
  12. if(length==posicion+1)
  13. n->valor+=monto;/
  14. else
  15. printf("agregando %i, avanzando por %i\n",*(valores)[posicion],posicion);
  16. system("PAUSE");
  17. /ese else es de prueba;
  18. posicion++;
  19. //aqui explota.. nose cual es la sintaxis para llamar a un hijo de mi trie...
  20. agregar(&((*n).(*hijo)[(*valores)[posicion]])),&(*valores),posicion,length,monto);
  21. //de manera corta les digo: quiero enviar a un metodo una structura puntero array....
  22. /*manera larga: el hijo N, tiene mas hijos (100), yo quiero entrar al numero que le toca,
  23. por ejemplo si yo entre por el 3, debe seguir al 15... entonces deberia enviar a n[15]...
  24. entonces esto explota y no encuentro nada como mejorar...
  25. si pueden ayudarme con esto( creo que me falta mas referencia o algo asi...*/
  26.  
  27. }
  28.  


//el metodo que uso de organizar es el siguiente:

Código
  1. void organizar(int* array[],int size)
  2. {
  3. int c;
  4. int c1;
  5. int temp;
  6. int temppos;
  7. for(c1=0;c1<size;c1++)
  8. {
  9.  temp=101;
  10.  for(c=c1;c<size;c++)
  11.  {
  12.  if (temp>(*array)[c])
  13.   {
  14.   temp=(*array)[c];
  15.   temppos=c;
  16.   }
  17.  }
  18.  (*array)[temppos]=(*array)[c1];
  19.  (*array)[c1]=temp;
  20. }
  21. for(c=0;c<size;c++)
  22. printf("%i ",(*array)[c]);
  23. }
  24.  
  25.  



gracias...
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines