请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。
输入给出正整数n(<10)。
输出1到n的全排列。每种排列占一行,数字间无空格。排列的输出顺序为字典序,即序列a1,a2,⋯,an排在序列b1,b2,⋯,bn之前,如果存在k使得a1=b1,⋯,ak=bk 并且 ak+1<bk+1。
3
123
132
213
231
312
321
第一dfs
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1010;
int num[maxn];
void print_per(int n,int *A,int cur)
{
if(cur==n)
{
for(int i=0;i<n;i++)
printf("%d",A[i]);
printf("\n");
}
else
for(int i=1;i<=n;i++)
{
int ok = 1;
for(int j=0;j<cur;j++)
{
if(A[j]==i) ok=0;
}
if(ok)
{
A[cur]=i;
print_per(n,A,cur+1);
}
}
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
num[i] = i+1;
print_per(n,num,0);
}
第二个就是比较骚了, C++stl 函数
#include <bits/stdc++.h>
using namespace std;
char getchars(int x)
{
return (char)(x+'0');
}
int main()
{
string s;
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
s.push_back(getchars(i));
cout<<s<<endl;
while(next_permutation(s.begin(),s.end()))
{
cout<<s<<endl;
}
}