C语言程序设计100例之(31):全排列问题
例31 全排列问题 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 n(1≤n≤9) 输出格式 由1~n组成的所有不重复的数字序列,每行一个序列。序列中每个数字占5个宽度。 输入样例 3 输出样例 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 (1)编程思路。 采用递归的方法来生成全排列。 (2)源程序。 #include <stdio.h> int a[9],flag[10]={0}; void dfs(int pos,int n) { if (pos==n) // 已有n个数 { for (int i=0;i<n;i++) printf("%5d",a[i]); printf("\n"); } else { for(int i=1;i<=n;i++) { if(flag[i]) continue; a[pos]=i; flag[i]=1; dfs(pos+1,n); flag[i]=0; } } } int main() { int n; scanf("%d",&n); dfs(0,n); return 0; } 习题31 31-1 选书 本题选自洛谷题库 (https://www.luogu.org/problem/P1657) 题目描述 学校放寒假时,信息学奥赛辅导老师有1,2