输出从1~n的全排列

来源:互联网 发布:ie11不支持java插件 编辑:程序博客网 时间:2024/05/16 12:46

思想:采用递归的方式,比如第一次取1,那么剩下的2~n进行全排列,以此类推。

#include <stdio.h>#include <stdlib.h>#include <string.h>void print(int *pers, int n){int i =0;for(i = 0; i < n; i++){printf("%d", pers[i]);}printf("\n");}/* *pers保存已经排列的数,cur标记当前pers中的排列位置 * */int permutation(int *pers, int n, int cur){int i = 0, j = 0;if(cur == n){print(pers, n);}else{for(i = 1; i <= n; i++)   //每次都是1~n取数,已有数的排除通过内循环剔除{int ok = 1;for(j = 0; j < cur; j++)   //遍历已取数{if(pers[j] == i){ok = 0;break;}}if(ok){pers[cur] = i;permutation(pers, n, cur + 1);}}}}void main(){int n;scanf("%d", &n);int *pers = (int *)malloc(n * sizeof(int));permutation(pers, n, 0);}



0 0
原创粉丝点击