JAVA--全排列输出--带动态图

/**
 * @author:Ravanla
 * @vreate:2019-10-22-10:46
 */
import java.util.Scanner;
public class P1546 {
	int n;
	int[] A;
	boolean[] Mark;	
	public P1546() {
		Scanner sc=new Scanner(System.in); 
		n=sc.nextInt(); A=new int[n]; Mark=new boolean[n+1];
		Permute(0);	
	}
	
	void Permute(int index) {	//递归函数
		if(index>=n) {
			for(int a:A) System.out.print(a+" ");
			System.out.println();
			return;
		}
		for(int i=1;i<=n;i++)	// 为了让每一个位置都用得上我输入的n个数字,所以我们用第i位的Mark循环n次,
								// 并以试探 回溯的方式保证每一个数字只在第i位出现一次
			if(Mark[i]==false) {	//数字i没用过
				A[index]=i;	Mark[i]=true;		//标记i已被使用
				Permute(index+1);				//去到下个位置
				Mark[i]=false;					//还原标记
			}	
	}

	public static void main(String[] args) {
		P1546 m=new P1546();  
	}

}

二维数组:同样的思路

import java.util.Scanner;

/**
 * @author:Ravanla
 * @vreate:2019-10-24-19:46
 */
public class QuanPaiLei {
    int n;
    int[][] A;
    public QuanPaiLei(){
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        A = new int[n+1][2];
        Permute(0);
        //System.out.println(" 1");
    }

    void Permute(int index) {
        if (index == n) {

            for(int i = 0; i < index; i++){
                System.out.print(A[i][0] + " ");
            }
            index--;
            System.out.println(" ");
            return;
        }
        for(int i = 1; i <= n; i++)
            if(A[i][1] == 0){
                A[index][0] = i;
                A[i][1] = 1;
                Permute(index+1);
                A[i][1] = 0;
            }
    }

    public static void main(String[] args) {
        QuanPaiLei q = new QuanPaiLei();
    }
}

在这里插入图片描述
第二张图是全过程图片,但是有一小段重复了一下,因为录gif的原因,凑合着看吧,我已将不想再弄gif了
在这里插入图片描述
可以用手机录屏录下来慢慢看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值