已知一个数组中有n个字母,想输出这n个字母的全排列(且要求每输出一种排列就换行),例如:当数组中字母为ABC时,可输出ABC、ACB、BAC、BCA、CAB、CBA六种不同的排列。
算法的大概思想是采用递归的方法实现:定义一个函数,有两个参数,参数1为待处理的字母的数组,参数2为已确定的部分排列;函数功能是依次从参数1中取一个字母加入到参数2后面,并递归调用,若参数1数组为空,则输出参数2。
例如:要求ABC的全排列,则以参数1=数组ABC,参数2=空串来调用该函数;函数执行时,先取出A,以参数1=数组BC,参数2="A"来递归调用,然后取出B,以参数1=数组AC,参数2="B"来递归调用,最后以参数1=数组AB,参数2="C"来递归调用。若参数1=数组BC,参数2="A",则函数执行时,先以参数1=数组C,参数2="AB"来递归调用,再以参数1=数组B,参数2="AC"来递归调用。
请根据上述算法思想,写出函数的详细的伪代码(或完整的程序代码),要求输出ABCDEFG的全排列。

解决方案 »

  1.   

    http://topic.csdn.net/u/20090625/17/37ab46e6-099b-4044-912f-de862dda2e72.html看看这个贴,应该对你有所帮助
      

  2.   

    可以参考下 《java数据结构和算法》第二版的 递归一章, 里面有详细讲到
      

  3.   

    这里由一个求全排列的代码  lz试一下咯import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;public class Permutation { private static int number = 0;

    public Permutation(){
    init();
    }

    public void permutation(int[] perm, int index){

    if(index ==(number - 1)){
    for(int i = 0; i < number; i++){
    System.out.print(perm[i]);
    }
    System.out.println();
    }else{
    for(int j = index; j < number; j++){
    swap(perm,index,j); //交换这两个数
    permutation(perm,index+1);
    swap(perm,index,j); //换回这两个数, 然后增加步长
    }
    }

    }

    public void swap(int[] perm, int first, int second){
    int temp = perm[first];
    perm[first] = perm[second];
    perm[second] = temp;
    }

    public static void main(String[] args){
    Permutation p = new Permutation();
    int[] perm = new int[number];
    for(int i = 0; i < number; i++){
    perm[i] = i + 1;
    }

    p.permutation(perm,0);
    }

    private void init(){
    while(true){
    System.out.println("请输入一个小于9 的整数");
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String line = null;
    try {
    line = br.readLine();

    } catch (IOException e) {
    e.printStackTrace();
    }

    number = Integer.parseInt(line);
    if(number >= 9){
    System.out.println("输入的整数必须小于9");
    }else{
    break;
    }
    }

    }
    }
      

  4.   

    代码不规范一点就是伪码了呗
    permutation(int[] perm, int index){
            if(index ==(number - 1)){
                Print
            }else{
                for(int j = index; j < number; j++){
                    swap(perm,index,j); //交换这两个数
                    permutation(perm,index+1);
                    swap(perm,index,j); //换回这两个数, 然后增加步长
                }
            }
            
        }