回溯法:
#include <bits/stdc++.h>
using namespace std;
int n, num[50], a[50];
bool mark[50];
void dfs(int x) {
if (x == n+1) {
for (int i = 1; i <= n; i++) cout << a[i];
putchar('\n');
return;
}
for (int i = 1; i <=n; i++) {
int tmp = num[i];
if (!mark[tmp]) {
a[x] = tmp;
mark[tmp] = 1;
dfs(x + 1);
mark[tmp] = 0;
}
}
}
int main() {
cin >> n;
for(int i=1;i<=n;i++) num[i]=i;
dfs(1);
return 0;
}
用STL库函数:
#include<bits/stdc++.h>
using namespace std;
int a[50];
int main(){
int n;scanf("%d",&n);
for(int i=1;i<=n;i++) a[i]=i;
do{
for(int i=1;i<=n;i++) printf("%d",a[i]);
putchar('\n');
}while(next_permutation(a+1,a+n+1));
return 0;
}