Sprawdzenie błędu w algorytmie

0

Witam. Chcę napisać algorytm wypisujący wszystkie permutacje podanego zbioru i wykodziłem coś lecz dla permutacji o długości większej niż 2 się sypie, więc musi być jakiś błąd. Proszę o podpowiedź co robię źle, z góry dzięki!

public void wypiszPermutacje(Set ciag) { //jako parametr podczas wywoływania podaję HashSet<Integer>
		if(ciag.size()==1) System.out.println(ciag.iterator().next());
		else for(int i=1; i<=ciag.size(); i++) {
			Set ciag2=new HashSet<Integer>();
			ciag2.addAll(ciag);
			Iterator it=ciag2.iterator();
			for(int k=0; k<i-1; k++) it.next();
			System.out.print(it.next());
			it.remove();
			wypiszPermutacje(ciag2);
		}
	}
1

Aby wypisać wszystkie permutacje masz dwie możliwości:

  • stworzyć wpierw wszystkie permutacje,
  • przesuwać kursor po konsoli i dopisywać znaki, jeśli chcesz wypisać np. permutacje cyfr od '1' do '3' to zaczynasz od wypisania
    1
    1
    2
    2
    3
    3
    potem wracasz na górę i dopisujesz drugą kolumnę, .... W Twoim kodzie nie widzę ani pierwszego, ani drugiego rozwiązania.
1

Kod, który generuje wszystkie permutacje liczb od 1 do n.

ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> al=new ArrayList<Integer>();
al.add(1);
result.add(al);
for(int i=2;i<=n;i++)
{
     result=dopisz(result,i);
}
//----------
ArrayList<ArrayList<Integer>> dopisz(ArrayList<ArrayList<Integer>> permutacje,int liczba)
{
    ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>();
    for(int i=0;i<permutacje.size();i++)
    {
        int rozmiar=permutacje.get(0).size();
        for(int j=0;j<=rozmiar;j++)
        {
            ArrayList<Integer> wiersz=new ArrayList<Integer>(permutacje.get(i));
            wiersz.add(j,liczba);
            result.add(wiersz);
        }
    }
    return result;
}

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