tworzenie kombinacji elementów ze zbioru

0

Witam!
Może ktoś już "przerabiał" następujące zagadnienie:
ze zbioru n-elementowego np. {5,6,2} należy wyznaczyć wszystkie kombinacje jego elementów (w podanym przykładzie jest ich 3!=6, czyli: 5-6-2, 5-2-6, 6-5-2, 6-2-5, 2-5-6, 2-6-5). Tak wyznaczone kombinacje trzeba zapisać w kolejnych wierszach tablicy tak, aby każdy element znalazł się w oddzielnej komórce (w podanym przykładzie będzie to tablica składająca się z 3 kolumn i 6 wierszy). Zbiory mogą zawierać od 3 do 7 elementów.
Będę wdzięczny za wszelkie sugestie.

0
jacek_ napisał(a)

Witam!
Może ktoś już "przerabiał" następujące zagadnienie:
ze zbioru n-elementowego np. {5,6,2} należy wyznaczyć wszystkie kombinacje jego elementów (w podanym przykładzie jest ich 3!=6, czyli: 5-6-2, 5-2-6, 6-5-2, 6-2-5, 2-5-6, 2-6-5). Tak wyznaczone kombinacje trzeba zapisać w kolejnych wierszach tablicy tak, aby każdy element znalazł się w oddzielnej komórce (w podanym przykładzie będzie to tablica składająca się z 3 kolumn i 6 wierszy). Zbiory mogą zawierać od 3 do 7 elementów.
Będę wdzięczny za wszelkie sugestie.

Tak dokladniej to sa to permutacje tego zbioru.

Przyklad rekurencyjnego rozwiazania:

		private int silnia(int n)
		{
			int ret=1;
			for(int i=2;i<=n;i++)
				ret*=i;
			return ret;
		}
		
		private int[][] permutacje(int [] tab)
		{
			if (tab.Length == 2)
			{
				int [][]ret = new int[2][];
				for(int i=0;i<ret.Length;i++)
					ret[i] = new int[2];
				for(int i=0;i<2;i++){
					ret[i][i]=tab[0];
					ret[i][(i+1)%2]=tab[1];
				}
				return ret;
			}
			int [][] rest = new int[silnia(tab.Length)][];
			int index=0;
			for(int i=0;i<rest.Length;i++)
				rest[i] = new int[tab.Length];
			for(int i=0;i<tab.Length;i++){
				int []subtab = new int[tab.Length-1];
				int subindex=0;
				for(int j=0;j<tab.Length;j++)
					if(j!=i) subtab[subindex++]=tab[j];
				int [][]reszta= permutacje(subtab);
				
				for(int j=0;j<reszta.Length;j++)
				{
					rest[index][0]=tab[i];
					for(int k=0;k<reszta[j].Length;k++)
						rest[index][k+1] = reszta[j][k];
					++index;
				}
			}
			return rest;
		}

pozdrawiam
johny

0

dzięki za pomoc

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