请编写程序输出前nnn个正整数的全排列(n<10n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。
输入格式
输入给出正整数n(<10<10)。
输出格式:
输出1到nn的全排列。每种排列占一行,数字间无空格。排列的输出顺序为字典序,即序列a1,a2,⋯,an排在序列{ b_1, b_2, \cdots, b_n }b1, b2,⋯,bn之前,如果存在kk使得a_1=b_1, \cdots, a_k=b_ka1=b1,⋯,ak=bk 并且a_{k+1}<b_{k+1}ak+1<bk+1。
输入样例:
3
输出样例:
123 132 213 231 312 321
#include<stdio.h> #include<string.h> int a[10]; int book[10]; int n; void dfs(int step) { int i,j,x,k; k=step; int next[11]={0,1,2,3,4,5,6,7,8,9,10}; if(step==n) { for(i=0;i<step;i++) { printf("%d",a[i]); } printf("\n"); return ; } for(i=1;i<=n;i++) { x=next[i]; if(!book[x]) { a[step]=x; book[x]=1; dfs(k+1); book[x]=0; } } } int main() { scanf("%d",&n); memset(book,0,sizeof(book)); dfs(0); return 0; }