全排列的递归算法
来源:互联网 发布:mac显示电池没有在充电 编辑:程序博客网 时间:2024/04/29 05:12
分析
对 1 2 3 进行全排列:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
共有六种情况,可以发现:对1 2 3 的全排列可以分成以1为首的全排列、以2为首的全排列、以3为首的全排列三个子问题,而每个子问题又可以分成以其余两个数为首的全排列。把问题转化为规模缩小了的同类问题的子问题,这样一来我们就可以通过递归来解决这个问题了。
代码
#include<stdio.h>//交换a[i]和a[j]void swap(int a[],int i,int j){ int temp=a[i]; a[i]=a[j]; a[j]=temp;}//将数组a的从第p个q个做全排列 void perm(int a[],int p,int q){ int i; //递归完成 if(p==q){ for(i=0;i<4;i++){ printf("%d ",a[i]); } printf("\n"); } //从第p到q个全排列 for(i=p;i<=q;i++){ swap(a,p,i); perm(a,p+1,q); swap(a,p,i); } } int main(){ int a[4]={1,3,4,5}; perm(a,0,3); return 0; }
还有不明白的可以看这个视频:
http://www.tudou.com/programs/view/nnndforCugA/?FR=LIAN
0 0
- 全排列的递归算法
- 全排列的递归算法
- 全排列的递归算法
- 全排列的递归算法!
- 全排列的递归算法
- 全排列的递归算法
- 全排列递归算法
- 全排列递归算法
- 全排列算法-递归
- 全排列递归算法
- 全排列递归算法
- 全排列递归算法
- 全排列递归算法
- 全排列递归算法
- 全排列递归算法
- 全排列递归算法
- 全排列递归算法
- 递归算法---全排列
- sqlite介绍
- JAVA中堆和栈的区别
- MATLAB第一次作业
- RxAndroid2.0使用概述
- FZU a^b(结论题)
- 全排列的递归算法
- 利用Google地图查询指定IP地址的位置
- crontab 定时任务避免重复执行
- poj 3041 Asteroids 二分图匹配
- Android之文件actionbar自定义布局
- 1002. 写出这个数 (20)
- Android 导入第三方库失败
- 一种对DNS攻击的设想
- 数组的length属性可读可写,字符串的长度length属性不可以修改