Generowanie kombinacji 2-elementowych JAVA

0

Witam,

Wie ktoś może jak np ze zbioru 6elementowego wygenerować wszystkie możliwe kombinacje 2-elementowe?
np

[1,3,4,6,7,9]

15 możliwych kombinacji:

[1,3][4,6][7,9]
[1,4][3,6][7,9]
....
....

zbiory liczb z których trzeba wyznaczyć kombinacje mogą być 2,4,6,8,10... elementowe

proszę o pomoc

Pozdrawiam,
borewicz

0

najmniej skomplikowany to bruteforce za pomocą pętli.

0
Koziołek napisał(a)

najmniej skomplikowany to bruteforce za pomocą pętli.

probowałem, ale to nie jest takie proste jak myślałem :-(
jak możesz napisz jak to powinno wyglądać :-)
pozdrawiam

0
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] liczby = new int[] { 1, 2, 3, 4, 5, 6 };
		int s = 6;
		int c = 1;
		for (int i = 0; i < s; i++) {
			for (int j = i + 1; j < s; j++) {
				System.out.println(c + ": [" + liczby[i] + "," + liczby[j]
						+ "]");
				c++;
			}
		}
	}
}
0
Koziołek napisał(a)
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] liczby = new int[] { 1, 2, 3, 4, 5, 6 };
		int s = 6;
		int c = 1;
		for (int i = 0; i < s; i++) {
			for (int j = i + 1; j < s; j++) {
				System.out.println(c + ": [" + liczby[i] + "," + liczby[j]
						+ "]");
				c++;
			}
		}
	}
}

Wielkie dzięki za ten kod, ale nie działa do końca tak jak chciałem

musze zrobić coś takiego, że z np 6 elementów wyznacza mi wszystkie możliwe kombinacje 2 elementowe

cos jak na tej stronie http://www.i-lo.tarnow.pl...pages/ol026.php

gdzie 6 wierchołków musze tak połączyć w pary aby suma dróg łączących pary była najmniejsza

pozdrawiam,
borewicz

0
borewicz napisał(a)
Koziołek napisał(a)
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] liczby = new int[] { 1, 2, 3, 4, 5, 6 };
		int s = 6;
		int c = 1;
		for (int i = 0; i < s; i++) {
			for (int j = i + 1; j < s; j++) {
				System.out.println(c + ": [" + liczby[i] + "," + liczby[j]
						+ "]");
				c++;
			}
		}
	}
}

Wielkie dzięki za ten kod, ale nie działa do końca tak jak chciałem

musze zrobić coś takiego, że z np 6 elementów wyznacza mi wszystkie możliwe kombinacje 2 elementowe

cos jak na tej stronie http://www.i-lo.tarnow.pl...pages/ol026.php

gdzie 6 wierchołków musze tak połączyć w pary aby suma dróg łączących pary była najmniejsza

pozdrawiam,
borewicz

to jest ta stronahttp://www.i-lo.tarnow.pl/edu/inf/utils/rozinf/pages/ol026.php
w połowie strony jest o tym łączeniu wierzcholkow

0

Polecam rozwiązanie rekurencyjne:

import java.util.Arrays;

public class Kombinacje {
    private static String paraToString(int a, int b){
        return "(" + a + ", " + b + ")";
    }
    
    public static void kombinacje(int[] t){
        if (t == null) throw new NullPointerException();
        if (t.length == 0 || (t.length & 1) == 1) throw new IllegalArgumentException();
        kom("", t);   
    }  

    /*przed - napis z ustalonymi juz parami 
       t - liczby bez pary */
    private static void kom(String przed, int[] t){ 
        if (t.length == 2)
             System.out.println(przed + paraToString(t[0], t[1])); //wypisujemy gdy zejdziemy z rekursja na sam dol
        else {
             int[] t2 = Arrays.copyOfRange(t, 2, t.length); //kopia wszystkiego oprocz pierwszych dwoch
                    
             for(int i = 1; i < t.length; i++){                                 
                kom(przed + paraToString(t[0], t[i]), t2);   //rekurencja
                if (i - 1 < t2.length)
                    t2[i - 1] = t[i];
            }
        }      
    }
    
     public static void main(String[] args) {
        Kombinacje.kombinacje(new int[] {1,2,3,4,5,6,7,8});
    }
}
0
__krzysiek85 napisał(a)

Polecam rozwiązanie rekurencyjne:

import java.util.Arrays;

public class Kombinacje {
    private static String paraToString(int a, int b){
        return "(" + a + ", " + b + ")";
    }
    
    public static void kombinacje(int[] t){
        if (t == null) throw new NullPointerException();
        if (t.length == 0 || (t.length & 1) == 1) throw new IllegalArgumentException();
        kom("", t);   
    }  

    /*przed - napis z ustalonymi juz parami 
       t - liczby bez pary */
    private static void kom(String przed, int[] t){ 
        if (t.length == 2)
             System.out.println(przed + paraToString(t[0], t[1])); //wypisujemy gdy zejdziemy z rekursja na sam dol
        else {
             int[] t2 = Arrays.copyOfRange(t, 2, t.length); //kopia wszystkiego oprocz pierwszych dwoch
                    
             for(int i = 1; i < t.length; i++){                                 
                kom(przed + paraToString(t[0], t[i]), t2);   //rekurencja
                if (i - 1 < t2.length)
                    t2[i - 1] = t[i];
            }
        }      
    }
    
     public static void main(String[] args) {
        Kombinacje.kombinacje(new int[] {1,2,3,4,5,6,7,8});
    }
}

To jest dokładnie to o co mi chodziło :-) :-) :-) :-)
Wielkie dzięki __krzysiek85
[browar]

1 użytkowników online, w tym zalogowanych: 0, gości: 1