全排列问题
来源:互联网 发布:cmmb电视模块软件 编辑:程序博客网 时间:2024/05/18 11:47
一:全排列问题算法描述如下:
举例: 345的全排列分别为 345 354 435 453 534 543, 可见将整组数中的所有的数分别与第一个数交换,这样就总是在处理后n-1个数的全排列。
又举例:45的全排列有 45 54 可见将第一个数分别与后面的数交换后输出即为45的全排列。
所以,对于一个很长一帮子的数,如123412414132,我们需要将1与后面所有的数交换输出,它又包含一个字问题即将2与后面所有的数交换输出,又包含3,4....,
知道3,2交换并输出,这是一个递归的过程,3,2交换输出完成后,就开始回退出栈。
这一系列过程相当于把一个大问题划分成好多小问题 。
二:代码如下:
#include <iostream>#include <cstring>using namespace std;template <typename T>void full_permutation(T list[], int cur, int end) //cur和end都是下标值{ if(cur == end){ for(int i=0; i<=end; ++i) cout<<list[i]; cout<<endl; } else{ for(int i=cur; i<=end; ++i){ //第一次递归时,每次i都和cur即当前下标相等,知道i==end输出,然后递归回去 swap(list[cur], list[i]); full_permutation(list, cur+1, end); swap(list[cur], list[i]); } }}int main(){ char list[] = "abc"; full_permutation(list, 0, strlen(list)-1); return 0;}
结果如下:
0 0
- 全排列问题
- 全排列问题
- 字符串全排列问题
- 全排列问题
- 字符串全排列问题
- 全排列问题实现
- 全排列问题
- 全排列问题
- 递归 全排列 问题
- 全排列问题
- 全排列问题
- 全排列问题浅谈
- 全排列问题
- 全排列问题
- 全排列问题
- 全排列问题
- 全排列问题(0907)
- 全排列问题
- 【JZOJ4799】我的快乐时代
- Linux 安装 MongoDB总结
- POJ 2262 Goldbach's Conjecture 简单的素数
- 3 Python 函数传参_(不)可变类型
- hdu1083——Courses(匈牙利算法)
- 全排列问题
- HTMl5的存储方式sessionStorage和localStorage详解
- F - shǎ崽 OrOrOrOrz
- CSS3 Filter特效详解
- Uva 133 救济金发放
- 注入(3)--远程线程注入(CreateRemoteThread)
- 找第k大的东西(密码,uva 1262)
- 求两个整数的最大公约数和最小公倍数(通过调用自定义函数实现)
- 二叉树(C++实现)