全排列问题:
任意输入一个整数n(一般小于10),然后打印出1-n的全部可能排列。高手请多指点

解决方案 »

  1.   


    public class Test
    {
    private int nCount;
    private boolean[] bUsed;
    private int r;
    private int[] print;

    public Test(int n, int r)
    {
    nCount = n;
    this.r = r;

    print = new int[n];
    bUsed  = new boolean[n];

    // 初始化
    for (int i = 0; i < n; i ++)
    {
    print[i] = 0;
    bUsed[i] = false;
    }
    }

    public void permute(int pos)
    {
    int i; 
    /*如果已是第r个元素了,则可打印r个元素的排列 */ 
    if (pos==r) { 
         for (i=0; i< r;i++) System.out.print(print[i]+1);
         System.out.println();
         return; 
     }
     
     for (i=0; i<nCount;i++)
         if (!bUsed[i]) { /*如果第i个元素未用过*/ 
       /*使用第i个元素,作上已用标记,目的是使以后该元素不可用*/ 
            bUsed[i] = true ; 
        /*保存当前搜索到的第i个元素*/ 
            print[pos] = i; 
        /*递归搜索*/ 
            permute(pos+1); 

       /*恢复递归前的值,目的是使以后改元素可用*/ 
            bUsed[i] = false; 
         } 
    }

    public static void main(String[] args)
    {
    Test t = new Test(5,3);  // 若要全排列,换做 new Test(5,5)

    t.permute(0);
    }
    }
      

  2.   

    public Test(int n, int r),如果全排列的话,r与n不就是一样的吗?
      

  3.   

    排列组合的思想.
    上面实现的是,如果有n个数,提取出r个数,总共会有几种排列方法.
    如果要全排列,那么r = n.