/**
* @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了
可以用手机录屏录下来慢慢看