加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

输出列举数1,2,...,n的所有排列(java实现)

(2010-10-13 18:59:48)
标签:

所有排列

permutations

排序算法

教育

分类: algorithms

package com.java.scgm.algorithms;


 public class Perms {

 

        int p[];

 

        public void init(int n){                        //创建一个数组,用于保存排序的元素

               p= new int [n];

 

               for(int i=0;i<p.length;i++){

               p[i] = 0;                                                   //初始化为0,注意在perm中作用

               }

       }

 

        public void Permutations(int n){

                perm(n);

         }

 

        public void perm(int m){

               if(m==0){                                                      //m=o说明perm已被所有连续的值n-1,n-2,......,0调用。

                    for(int j=0;j<p.length;j++){                  //在这种情况下,数组p[1...n]没有 //p[j]=0的项,并且包含一个

                         System.out.print(p[j]+" ");              //一个{12......n}的排列

                     }

                     System.out.println();

                    }

              else{                                                                //如果m>0,说明m+1,m+2,...,n已经 //被分配到数组p[1...n]

                     for(int k=0;k<p.length;k++){                //中的某些项。接下来的操作就是找到 //p[k]=0的项,并置

                           if(p[k]==0){                                         //p[k]=0,后用参数m-1递归调用过程 //perm.

                                  p[k] = m;

                                  perm(m-1);

                                  p[k] = 0; //注意:递归调用后,要置p[k]=0,后 //面的调用才能使用它。

                           }

                    }

              }

         }

 

         public static voidmain(String[] args){

                Perms pe = new Perms();

                pe.init(4);

                pe.Permutations(4);

        }

}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有