#include <iostream>
using namespace std;
const int N=10;
int path[N];
bool st[N];
void dfs( int u)
{
if(u==n)//这个是判断是否走到了终点
{
for(int i=0;i<n;i++) cout<<path[i];
cout<<endl;
return ;
}
for(int i=1;i<=n;i++)
{
if(!st[i])//看是否走过
{
path[u]=i;
st[i]=ture;
dfs(u+1);
st[i]=false;//回溯
}
}
}
int main()
{
cin>>n;
dfs(0);
return 0;
}
eg输入3,输出123 132…对1到3 的数进行全排列共有六种;
java:
package org.example;
import java.util.Scanner;
public class Permutations {
private static final int N = 10;
private static int[] path = new int[N];
private static boolean[] st = new boolean[N];
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
dfs(n, 0);
}
private static void dfs(int n, int u) {
if (u == n) {
for (int i = 0; i < n; i++) {
System.out.print(path[i] + " ");
}
System.out.println();
return;
}
for (int i = 1; i <= n; i++) {
if (!st[i]) {
path[u] = i;
st[i] = true;
dfs(n, u + 1);
st[i] = false; // 回溯
}
}
}
}