Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - luisdr22

#1
buenas, estoy intentando de crear una especie de estructura trie en c... tengo la siguiente estructura

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


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 (c_mac) [Seleccionar]

int main()
{
Numero temp[101];
Numero *combinaciones=temp;
int cn;//cantidad de numeros;
scanf("%i",&cn);
int tempi[cn+1];
int c1;
int c;
int *numeros=tempi;
for(c1=0;c1<cn;c1++)
scanf("%i",&numeros[c1]);
organizar(&numeros,cn);
agregar(&(*combinaciones)[(*numeros)[0]],&numeros,1,cn,100);
return 0;
}


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:


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

}



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


void organizar(int* array[],int size)
{
int c;
int c1;
int temp;
int temppos;
for(c1=0;c1<size;c1++)
{
 temp=101;
 for(c=c1;c<size;c++)
 {
 if (temp>(*array)[c])
  {
  temp=(*array)[c];
  temppos=c;
  }
 }
 (*array)[temppos]=(*array)[c1];
 (*array)[c1]=temp;
}
for(c=0;c<size;c++)
printf("%i ",(*array)[c]);
}





gracias...