#include <iostream>
#include<cstdio>
const int max=1100;
int n,p[max],hashTable[max]={false};//hashTable用来记录数字是否已排列
//递归求数字全排列;
void func(int index){
int i;
if(index==n+1){
for(i=1;i<=n;i++)
printf("%d",p[i]);
printf("\n");
}
for(i=1;i<=n;i++){
if(hashTable[i]==false){
p[index]=i;
hashTable[i]=true;
func(index+1);
}
}
hashTable[i]=false;
}
int main()
{
scanf("%d",&n);
func(1);
return 0;
}
Java
import java.util.Scanner;
public class Demo {
public void Perm(int list[], int k, int m) {
if (k == m) {
for (int i = 0; i <= m; i++)
System.out.print(list[i]);
System.out.println();
} else {
for (int i = k; i <= m; i++) {
// 从固定的数后第一个依次交换
Swap(list, k, i);
Perm(list, k + 1, m);
// 这组递归完成之后需要交换回来
Swap(list, k, i);
}
}
}
public void Swap(int[] list, int i, int j) {
int t = list[i];
list[i] = list[j];
list[j] = t;
}
public static void main(String[] args) {
Demo d = new Demo();
Scanner input=new Scanner(System.in);
int n=input.nextInt();
int[] arr =new int [n];
for(int i=0;i<n;i++)
arr[i]=i+1;
d.Perm(arr, 0, n-1);
}
}