整数全排列(旋转法,next_permutation)
2015-05-29 21:59
183 查看
读了《C语言名题精选百则技巧篇》中的整数全排列,里面的算法是多样丰富的。看了旋转的基本思路和已经知道的最易用的next_permutation(),自己把两者都实现并且运行了一遍。只有不断学习,观察,猜想,推敲,实践才有可能弄懂算法的奥义。两种方式都产生相同数目的排列,但是次序是不同的。
旋转:
next_permutation():
旋转:
#include <iostream> #include<cstdio> using namespace std; int A[5]={1,2,3,4,5}; void show(){ for(int i=0;i<5;i++){ printf("%d ",A[i]); } cout<<endl; } void rotate(int dex){ int t=A[dex],i; for(i=dex+1;i<5;i++){ A[i-1]=A[i]; } A[4]=t; } int main(int argc, char *argv[]) { int dex=0,index=0,sum=0; while(dex<4){ rotate(index); show(); sum++; dex=index; while(A[dex]==dex+1&&dex!=4){ dex++; rotate(dex); } } cout<<"sum= "<<sum<<endl; return 0; }
next_permutation():
#include <iostream> #include<cstdio> #include<algorithm> using namespace std; int A[5]={1,2,3,4,5}; void show(){ for(int i=0;i<5;i++){ printf("%d ",A[i]); } cout<<endl; } int main(){ int sum=0; do{ show(); sum++; }while(next_permutation(A,A+5)); cout<<"sum= "<<sum<<endl; return 0; }
相关文章推荐
- json对象,动态添加,修改,删除示例
- MongoDB学习笔记~批量插入方法的实现
- 最长递增子序列(LIS)
- 【VR】Leap Motion 官网文档 HandModel(手部模型)
- Java自动拆箱和自动装箱
- 菜鸟java记录四
- LeetCode-java实现-T2-Add Two Numbers
- Java Web:JSON 作为配置文件,简单读写的方法
- 分享一个网站
- leetcode Binary Tree Level Order Traversal
- MySQL 数据库性能优化之表结构
- Spring.net--AOP
- Emacs中使用R
- 利用51单片机制作的电子时钟
- 命令中的特殊字符
- 话说物联网操作系统
- 第13周-多态性--项目0-课后实践·阅读程序2.
- 利用51单片机制作的电子时钟
- windows配置redmine
- 【架构师之旅】ITOO框架总结