全排列-递归(不含去重复的操作)非DFS

import java.util.*;
public class Quanpaifeidigui {
    public static void main(String args[]){
        Scanner in=new Scanner(System.in);
        while(in.hasNext()){
            int n=in.nextInt();
            int num[]=new int[n];
            for(int i=0;i<n;i++){
                num[i]=in.nextInt();
            }
            Pailie(num,0);   //全排列
        }
    }
    public static void Pailie(int num[],int k){
        if(k==num.length-1){
            Print(num);
        }else{
            for(int i=k;i<num.length;i++){ //先保持不变,递归的栈的特点是最后开辟的栈先执行完毕,因此该递归执行的出的全排列具有一定顺序
                Swap(i,k,num);
                Pailie(num,k+1);
                Swap(i,k,num);
            }
        }
    }

    //交换函数
    public static void Swap(int x,int y,int num[]){
        int temp=num[x];
        num[x]=num[y];
        num[y]=temp;
    }
    //打印结果
    public static void Print(int num[]){
        for(int i=0;i<num.length;i++){
            if(i==0){
                System.out.print(num[i]);
            }else{
                System.out.print(" "+num[i]);
            }
        }
        System.out.println();
    }
}

猜你喜欢

转载自blog.csdn.net/anhuibozhoushatu/article/details/83869789
今日推荐