全排列算法的思想
2016-03-01 22:22
267 查看
全排列算法
题目要求:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
总体的思想是固定前面的某些元素位,比如1,2,3全排列时,先固定1,排后面的2,3,就有(1,2,3),(1,3,2)两种排列。让算法理解简化的一步是。将数组中的所有元素分别与第一个元素进行交换,这样就总是排列后面的n-1个元素。
题目要求:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
总体的思想是固定前面的某些元素位,比如1,2,3全排列时,先固定1,排后面的2,3,就有(1,2,3),(1,3,2)两种排列。让算法理解简化的一步是。将数组中的所有元素分别与第一个元素进行交换,这样就总是排列后面的n-1个元素。
//====递归算法========================== void Permu(int list[ ] , int n , int index) { if(index == n-1) printf(list); else for(int i=index;i<n;i++) { swap(list[i] , list[index]); Permu(list , n , index+1 ); swap(list[i] , list[index] ); } } int main( ) { int list[ ] = {1,2,3}; Permu(list, 3, 0); return 0; } //----------------------------------------------
相关文章推荐
- Android抽象布局——include、merge 、ViewStub
- SQLite3的面向对象封装FMDB
- ActiveX控件测试工具在VS2008下编译及使用
- Map及其子类
- EL表达式获取数据的方式
- NET权限系统开源项目
- 初探功能点估算以及功能点估算工具
- 线程创建方法
- Lua的string函数
- Git使用教程
- api with doorkeeper
- RabbitMq、ActiveMq、ZeroMq、kafka之间的比较,资料汇总
- linux命令 vim
- java基础篇——异常处理throw与throws的区别
- Linux技术——netstat命令详解
- POJ 3009 Curling 2.0
- 字符串2
- MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK
- 测试数据的简单导入
- 包管理工具Chocolatey使用方法