实现全排列的另一种方法(续)
2012-12-15 21:11
260 查看
实现全排列的另一种方法,就是实现递归。
实现思路:
假如 allsort(a b c);分治思想化为a+allsort(b c); b+allsort(a c), c+allsort(a b);
递归一层后计算第二层时:如allsort(b c)时,化为b+allsort(c) 和 c+allsort(b);
此时问题就明显了,首先确定一个元素,求剩下的全排列,如此类推下去做一个递归;
实现代码:
自此, 全排列的递归算法就算实现了。。。
实现思路:
假如 allsort(a b c);分治思想化为a+allsort(b c); b+allsort(a c), c+allsort(a b);
递归一层后计算第二层时:如allsort(b c)时,化为b+allsort(c) 和 c+allsort(b);
此时问题就明显了,首先确定一个元素,求剩下的全排列,如此类推下去做一个递归;
实现代码:
#include <stdio.h> #define N 4 int a ; void perm(int); void print(); void move(int, int); int main(){ int i; for(i = 0; i<N; i++){ scanf("%d",&a[i]); } perm(0); } void perm(int offset){ int i; if(offset == N-1){ print(); return; }else{ for(i = offset;i < N; i++){ move(i, offset); perm(offset + 1); move(i, offset); } } } void print(){ int i; for(i = 0; i < N-1; i++) printf("%d ",a[i]); printf("\n"); } void move(int i, int offset){ int temp; temp = a[offset]; a[offset] = a[i]; a[i] = temp; }
自此, 全排列的递归算法就算实现了。。。
相关文章推荐
- 全排列的另一种实现方法:旋转法
- sharepoint匿名实现的另一种方法
- 用递归的方法实现全排列
- 基于.net core微服务的另一种实现方法
- (精)1754 另一种方法实现线段树(这个里面没有用到value,但是添加了一个max)
- [置顶] C++全排列:一种新的全排列方法(使用单向链表实现)
- ASP.NET(c#) 日期选择控件的另一种实现方法
- 广播的另一种实现方法!
- 20元实现随处wlan小教程(更新pc上操作M8文件的“另一种”方法)
- Android自定义View:另一种实现手表指针转动的方法
- 全排列的递归实现方法
- Android:阴影效果的另一种实现方法:layer-list
- C--全排列的实现(递归方法) 傻子也能看懂的
- 多种方法实现。递归算法和标准函数库(STL)实现全排列+sort在全排列前的排序
- "好玩的放大镜效果" 的另一种实现方法
- ASP.NET(c#) 日期选择控件的另一种实现方法
- java程序加密的另一种实现方法
- List的的另一种实现方法的尝试
- 数据结构与算法分析 c++11 AVL tree 另一种实现方法
- 另一种方法实现弹出自身实例的子窗体