回溯法解决 排列组合问题 全排 选排 可重复 不可重复
2012-09-22 23:19
387 查看
/* 华科机试练手 * 回溯法解决 排列组合问题 * 1 : 全排列 * 2 :可重复全排列 * 3 : 不可重复的选择排序 * …… */ #include <stdlib.h> #include <stdio.h> int solution[100]; /* 可重复全排 */ int Perm(int a[], int n, int level) { int i; static int sum = 0; if(level == n) { sum++; for(i=0; i<level; i++) printf("%d\t",solution[i]); printf("\n"); return; } for(i=0; i<n; i++) { if(1) { solution[level] = a[i]; Perm(a,n,level+1); } } return sum; } /* 不可重复全排 */ int NoReptPerm(int a[], int n, int level) { int i,j,selected = 0; static int sum = 0; if(level == n) { sum++; for(i=0; i<level; i++) printf("%d\t",solution[i]); printf("\n"); return; } for(i=0; i<n; i++) { selected = 0; for(j=0; j<level; j++)//检查是否已经被选过 { if(solution[j] == a[i]) { selected = 1; break; } } if(!selected)//没被选过 { solution[level] = a[i];//加入解向量 NoReptPerm(a,n,level+1); } } return sum; } /* 选择排序(不可重复) */ int SelectPerm(int a[], int n, int m, int level) { int i,j,selected = 0; static int sum = 0; if(level == m) { sum++; for(i=0; i<level; i++) printf("%d\t",solution[i]); printf("\n"); return; } for(i=0; i<n; i++) { selected = 0; for(j=0; j<level; j++)//检查是否已经被选过 { if(solution[j] == a[i]) { selected = 1; break; } } if(!selected)//没被选过 { solution[level] = a[i];//加入解向量 SelectPerm(a,n,m,level+1); } } return sum; } int main(int argc, char *argv[]) { int i; int a[] = {1,2,3}; i = Perm(a,3,0); printf("Total : %d\n",i); i = NoReptPerm(a,3,0); printf("Total : %d\n",i); i = SelectPerm(a,3,2,0); printf("Total : %d\n",i); return 1; }
相关文章推荐
- Java解决排列组合问题——深度优先遍历
- C语言实现的排列组合问题的通用算法、解决方法
- (回溯法)解决一系列组合问题
- 数据库---并发控制及其带来的问题丢失修改,读脏数据,不可重复读及解决(程序员级)
- 递归解决问题的几种类型的排列(二、完整的组合安排)
- Java解决排列组合问题——深度优先遍历
- 程序员的数学 - 排列组合 - 解决计数问题的方法 - 阅读小结
- 排列 或组合问题的解法(包含回溯法)
- 《编程之法》1.3字符串的全排列,组合,重复排列,八皇后问题
- 解答树问题可分为子集生成和排列生成问题,都可以用回溯法解决并且是很优化的方案
- 一类排列组合问题的解决办法
- 回溯法求解全排列问题(可去除重复排列)
- AC解 - 用动态规划解决一道排列组合计数问题(序关系计算)
- 递归求解几类排列组合问题(六、非重复生成全子集组合排列)
- 回溯法解决组合与数的问题(递归与非递归算法)
- 如何用itertools解决无序排列组合的问题
- 引入进制概念解决排列组合问题
- 解决组合排列问题 A (m ,n) m>=n
- python 排列组合 解决实际问题
- 递归类型的排列组合来解决问题(一个、周期类排列组合)