-1

セット =(1, 2, 3) があり、セットのすべての可能なサブセットを異なるシーケンス (要素の繰り返し) で取得する必要があります。出力は次のようになります。

1
2
3
1,2
1,3
2,1
2,3
3,1
3,2
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1

誰かが私を助けてくれますか?thxx

4

2 に答える 2

0

この問題は、ビット演算を使用してすべての組み合わせを見つけることで解決できます。

アイデアは次のとおりです。特定の配列(セット)のすべてのサブセットを生成します。このセットは、パワーセットとして知られています。サブセット(組み合わせ)のそれぞれについて、その順列も見つけます。

ビットごとの操作を使用してすべての組み合わせを見つける方法については、次のチュートリアルを参照してください。http://www.codechef.com/wiki/tutorial-bitwise-operations

    void PERMUTE()
    {
        /*PERMUTATION FUNCTION THAT PERMUTES THE SUBSET ARRAY*/
    }
    public static void main(String[] args) 
    {
        // TODO code application logic here
        int Set[]={1,2,3};
        int n=Set.length;

       for (int i = 0; i <= (1 << n); ++i)
       {

           System.out.print("[");
           int subsetSz=0;
           int A[]=new int[100];
            for (int j = 0; j < n; ++j)
            {
                if ((i & 1 << j)!=0)
                {
                    System.out.print(Set[j]+",");
                    A[subsetSz++]=Set[j];

                }
            }
            System.out.println("]");
            /*Permute the subset*/
            if(subsetSz>1)
            {
                PERMUTE(A);
            }
        }
    }
于 2013-04-29T20:07:10.007 に答える