buenas, estoy intentando de crear una especie de estructura trie en c... tengo la siguiente estructura
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:
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:
//el metodo que uso de organizar es el siguiente:
gracias...
Código (c) [Seleccionar]
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:
Código (c) [Seleccionar]
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:
Código (c) [Seleccionar]
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...