再帰関数を使用して、この「スタイル」を維持しながら、繰り返しによる並べ替えをリストするのに問題があります。2次元配列の繰り返しを伴う並べ替えのリスト
、例えば2要素を有する「AB」及び「CD」、2次元アレイ状に:に
Element[0][0] = A; Element[0][1] = B; // AB
Element[1][0] = C; Element[1][1] = D; // CD
I(この場合2)n個の要素の繰り返しで全ての可能な順列を取得したいです(この場合は2)k個の基であり、例えば新しい2Dアレイ に保存:
Permutation[0][0] = AB; Permutation[0][1] = AB; // 1°: AB,AB
Permutation[1][0] = AB; Permutation[1][1] = CD; // 2°: AB,CD
Permutation[2][0] = CD; Permutation[2][1] = AB; // 3°: CD,AB
Permutation[3][0] = CD; Permutation[3][1] = CD; // 4°: CD,CD
要素と置換が二次元配列でなければなりません。戻って、わずか2のグループの2つの要素の順列に、
int i_perm = 0;
int i_element = 0;
int k_tot = 2; // number of groups
[...]
calcPerms(2);
[...]
private void calcPerms(int k)
{
if (k == 0)
{
if(i_perm + 1 < i_perm)
i_perm++;
i_element=0;
}
else
{
for (int i = 0; i < element.length; i++)
{
Permutation[i_perm][i_element][0] = Element[i][0];
Permutation[i_perm][i_element][1] = Element[i][1];
if(i_element + 1 < k_tot)
i_element++;
calcPerms(k - 1);
if(i_perm >= i_perm)
i_perm--;
Permutation[i_perm][i_element][0] = Element[i][0];
Permutation[i_perm][i_element][1] = Element[i][1];
if(i_element + 1 < k_tot)
i_element++;
}
}
}
これは動作しますが、上記のように: 私はこの方法を試してみましたが、それは唯一の2つの群に2要素の順列で動作し、私はロックされています正しく:
ABAB、ABCD、CDAB、CDCD。私は(第三要素がEFである)の3つの要素を置けば実際に
は、それが返されます。
ABAB、ABCD、CDEF、EFAB、ABCD、CDEF、EFAB、ABCD、EFEF
の代わりに:
ABAB、ABCD、ABEF、CDAB、CDCD、CDEF、EFAB、EFCD、EFEF
どのように私は私が欲しいものを得ることができますか?あなたの助けのためのあなたのすべてに感謝し、何が必要なのリンクWikipediaのページに明確な擬似コードの実装がありますHeap's Algorithm
である私の悪い英語
いくつかの注意次のようになります。A)それは "Javaの" ではないJAVAです。 B)あなたの質問のタグは関連する言語を識別するので、タイトルに入れる必要はありません。 – tadman
申し訳ありません!助けてくれてありがとう – Doublem
大したことはありません。この質問をサイトフォーマットに合わせて適切にしようとしています。 – tadman