• Viernes 15 de Noviembre de 2024, 02:37

Mostrar Mensajes

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


Temas - aerys

Páginas: [1]
1
Diseño de Algoritmos / Suma De Enteros O Particiones De 1 Numero
« en: Miércoles 9 de Enero de 2008, 13:19 »
Hola a todos,

Tengo problemas al generar todas las sumas posibles de 1 número entero dado, p ej 5, en 1 array de una long, p ej 4 de esta forma: 0 0 0 5, 0 0 1 4, 0 1 2 2 ..... 5 0 0 0

Necesito generar todas las combinaciones, aunque lo he hecho mediante recursividad, el problema es que genero muchisimas más cosas que son totalmente incorrectas o bien duplicados de soluciones anteriores.

Aqui os dejo mi código, ¿Se os ocurre una forma de resolver el problema? ya no se que como implementarlo llevo varias semanas con el mismo problema y no consigo una solucion correcta. En principio ni siquiera haría falta recursividad, pero no se como hacerlo.

Con este codigo acepta, p ej 4 4 4 4 cuando obviamente eso no suma 5 ni en broma.. :( con lo que genera muchisimas mas combinaciones de las necesarias, pero no se como regularlo.

Cualquier ayuda sería fantástica.

Huecos es el array de enteros, valor el numero 5 en el ejemplo el numero máximo y longitud la longitud del aray

public static void generar(int[] huecos, int longitud,int valor, List datox, int fila_actual,List fila){

        if (valor == 0){
            //tenemos 1 solucion q es vacio
                fila.add(generar_hijos(datox,fila_actual,huecos));
        }else{
           
            for (int i=(longitud-1); i>=0; i--){
                for (int j=0; j < valor; j++){
                    huecos=j;
                    if (i==0){                
                        /* Caso Base de la i  Añadimos soluncion */
                        fila.add(generar_hijos(datox,fila_actual,huecos));
                    }else{
                        generar(huecos,i,valor-j,datox,fila_actual,fila);
                    }
                }
            }

Páginas: [1]