递归实例——C语言实现全排列
2013-11-05 15:38
525 查看
最近在学习数据结构,感觉递归算法很有意思,写了一个用递归实现的全排列实例,如有错误欢迎批评指正!
#include "stdafx.h" void permutation(char s[], int b, int e) //被排列的数组中不能有重复的元素 { if(0<=b && b<=e) { if(b==e) { printf("%s\n",s); } else { int i = 0; for(i=b; i<=e; i++) { char c = s[b]; s[b] = s[i]; s[i] = c; permutation(s, b+1, e); c = s[b]; s[b] = s[i]; s[i] = c; } } } } void permutation_2(char s[], int b, int e) //被排列的数组中可以有重复的元素 { static int count = 0; char repeat[sizeof(s)/sizeof(char)] = {NULL}; //用于存储重复的元素 if(0<=b && b<=e) { if(b==e) { count++; printf("%d: %s\n",count,s); } else { int i = 0; int j = 0; int t = 0; //记录重复元素的个数 int repeat_num = 0; //记录连续重复元素的个数 int flag = 0; for(i=b; i<=e; i++) { for(j = 0;j<t;j++) { if(s[i]==repeat[j]) { flag = 1; repeat_num++; break; } } if(flag == 1) { continue; } else { repeat[t] = s[i]; t++; char c = s[b]; s[b] = s[i]; s[i] = c; permutation_2(s, b+1+repeat_num, e); c = s[b]; s[b] = s[i]; s[i] = c; } } } } } int _tmain(int argc, _TCHAR* argv[]) { char s[] = "abbcccc"; permutation_2(s,0,6); return 0; }
相关文章推荐
- 【C语言】递归实现元素的全排列和子集
- C语言递归实现全排列
- 全排列--字典序列、递归方法c语言实现
- C语言实现斐波那契数列(非递归)的实例讲解
- 递归实现全排列,关于凑算式实例
- 使用递归实现全排列的算法
- 迷宫问题--非递归回溯 C语言实现
- C语言实现字符转unix时间戳的简单实例
- C语言实现 递归 数字转换成字符串
- c语言简单递归/非递归实现二分查找
- 全排列(Perm)的递归实现算法
- 【c语言】 编写一个函数实现n^k,使用递归实现
- C语言中递归的实例
- php实现的递归提成方案实例
- 【算法】二叉树的递归遍历C语言实现
- C语言 编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列
- 全排列的递归实现
- C语言实现递归删除文件夹及文件
- 【c语言】递归实现n的k次方
- 【c语言】递归实现,输入一个非负整数,返回组成它的数字之和