您的位置:首页 > 编程语言

枚举排列各种思路代码

2013-05-04 15:57 253 查看
1.生成1-n的排列 递归法

#include<stdio.h>
int A[100];
// 输出1~n的全排列
void print_permutation(int n, int* A, int cur) {
int i, j;
if(cur == n) { // 递归边界
for(i = 0; i < n; i++) printf("%d", A[i]);
printf("\n");
} else for(i = 1; i <= n; i++) { // 尝试在A[cur]中填各种整数i
int ok = 1;
for(j = 0; j < cur; j++)
if(A[j] == i) ok = 0; // 如果i已经在A[0]~A[cur-1]出现过,则不能再选
if(ok) {
A[cur] = i;
print_permutation(n, A, cur+1); // 递归调用
}
}
}
//有点小疑问是对于这一个大数组A每次更新时把以前的数覆盖然后一直输出!!
int main() {
print_permutation(6, A, 0);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: