递归全排列
来源:互联网 发布:vb 图片保存到数据库 编辑:程序博客网 时间:2024/06/03 16:07
如0 1 2 3的全排列:
编程思想:如 0 1 2 3 的全排列=(0+1 2 3的全排列)+(1+0 2 3的全排列)+(2+1 0 3的全排列)+(3+ 1 2 0的全排列)。
1 2 3 的全排列=(1+2 3的全排列)+(2+1 3的全排列)+(3+1 2的全排列)
在求几个数的全排列时,每次使后面的元素和第一个交换后,再求出剩余元素的全排列。
如 0123 0132 0213 0231 0321 0312 1023 ……
在做时应注意回溯。
在之前我没有深刻理解程序是如何走的、、一直做得时错的。
建议单步调试,具体看程序每一步是如何走的。如何回溯,如何递归,i是在什么情况下加的,每一个全排列是在什么情况下输出的。
#include <stdio.h>
void swap(int *a,int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
void pailie( int *a,int b,int c)
{
int i;
if(b==c)
printf("%d %d %d %d\n",a[0],a[1],a[2],a[3]);//输出每一个全排列
else
{
for(i=b;i<=c;i++)
{
swap(&a[i],&a[b]);//确定全排列的这几个数的第一个元素的值
pailie(a,b+1,c);
swap(&a[i],&a[b]);//回溯 如 0132 应回溯程 0123 接着继续全排列,即返回到原来的状态
}
}
}
int main()
{
int a[4]={0,1,2,3},j=0,n=3;
pailie(a,0,3);
return 0;
}
- 递归--全排列
- 全排列递归算法
- 递归 全排列 问题
- 全排列递归算法
- 全排列算法-递归
- 全排列,递归实现
- 递归实现全排列
- 递归输出全排列
- 递归应用-全排列
- 递归实现全排列
- 全排列递归算法
- 全排列递归算法
- 递归全排列
- 递归写全排列
- 递归之全排列
- 递归枚举全排列
- 全排列递归算法
- 全排列,递归。
- hdoj1274_展开字符串
- 牛顿迭代法开N次方根
- jsp相对路径和绝对路径
- Qt+VS2010的配置
- 使用IBM Java Toolbox实现Java/C混合编程
- 递归全排列
- 基于cocos2d-x的Android游戏中使用fmod音频引擎
- Android技巧的提升
- Executors
- 指针函数和函数指针的区别
- linux 多路复用 select (二)
- HDU 4016 Magic Bitwise And Operation
- CSS选择器的权重详解
- SpringMVC+EXTJS4.1上传文件,并通过JSON格式返回异常信息