每天一个小程序(17)——全排列递归实现
来源:互联网 发布:cpa广告联盟源码 编辑:程序博客网 时间:2024/04/28 16:32
本程序参考STL系列之十 全排列(百度迅雷笔试题)
全排列的思想是从第一个数字起的每个数字分别于后边的数字进行交换。
//用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列, //如 abc 的全排列: abc, acb, bca, dac, cab, cba#include <stdio.h>#include <string.h>void Swap(char *a,char *b){char t = *a;*a = *b;*b = t;}bool IsSwap(char *str, int begin, int end){for(int i = begin; i < end; i++)if(str[i] == str[end])return false;return true;}void AllRange(char *str, int k, int m){if(k == m){static int s_i = 1;printf("第%-3d个排列 %s \n", s_i++,str);}else{for(int i = k; i <= m; i++){if(IsSwap(str,k,i)){Swap(str + k, str + i);AllRange(str, k + 1, m);Swap(str + k, str + i);}}}}void Foo(char *str){AllRange(str, 0, strlen(str) - 1);}void main(){char str[] = "12345";Foo(str);}
这个递归的方法是在调用AllRange函数前,交换一对数字,使得每一个数都有机会与后边的每一个数进行分别交换,这样就可以达到全排列的目的了。AllRange函数前调用Swap函数是为了交换一对数,AllRange函数之后调用Swap函数是将这个序列恢复,保证这个序列的正确输出。
0 0
- 每天一个小程序(17)——全排列递归实现
- java入门#每天一个小程序#全排列
- 算法——全排列递归实现
- 全排列——递归实现
- 全排列—递归
- 全排列,递归实现
- 递归实现全排列
- 递归实现全排列
- 递归实现全排列
- 递归实现全排列
- 递归实现全排列
- 递归实现全排列
- 全排列递归实现
- 递归实现全排列
- 全排列递归实现
- 全排列递归实现
- 递归实现全排列
- 递归实现全排列
- 黑马程序员 _9 OC基础 内存管理
- 多线程的原子锁
- 怎么使input 无边框充满容器
- 基数排序的性能优化
- 键盘技巧系列——Google Chrome
- 每天一个小程序(17)——全排列递归实现
- 黑马程序员 _8 OC基础 id description sel的使用
- 第一个Qt程序(貌似PATH配置不正确)
- 关于接口对象直接引用实现类的对象的小结
- 最长公共子序列
- 黑马程序员 _10 OC基础 block 协议 代理
- 三个小故事告诉你一生该追求什么
- 多线程的读写锁
- Class.forName的作用以及为什么要用它