递归求解字符数组全排列问题
2017-11-26 10:18
253 查看
问题描述:
编写一个算法,就地生成字符数组 S[1..n]的所有排列,要求算法终止时S[1..n]保持 态成表使S 初始状 态。就地生成表示不使用S以外的数组。
算法分析:
因为是全排列问题,时间复杂度是O(n!),也是最优的时间复杂度。
算法设计:
编写一个算法,就地生成字符数组 S[1..n]的所有排列,要求算法终止时S[1..n]保持 态成表使S 初始状 态。就地生成表示不使用S以外的数组。
算法分析:
因为是全排列问题,时间复杂度是O(n!),也是最优的时间复杂度。
算法设计:
/* *递归求解字符数组的全排列 * */ #include <iostream> #include <string> using namespace std; void swap(char &c,char &s){//在原地址上交换 char temp; temp=c; c=s; s=temp; } void permute(string s,int n){ /*n==1时,把s打印出来,这时的s是其中一种全排列 *将原问题分解为n个子问题: 子问题1:生成n-1个元素s[1],…,s[n-1]的全排列后接s ; 子问题2:生成n-1个元素s[1],…,s[n-2],s 的全排列后接s[n-1]; … 子问题n:生成n-1个元素s[2],…,s 的全排列后接s[1]; * * */ if(1==n)cout<<s<<endl; else{ permute(s,n-1);//第一个子问题 int i; for(i=n-2;i>=0;i--){//2-n个子问题 swap(s[i],s[n-1]); permute(s,n-1); swap(s[i],s[n-1]); } } } int main(){ string s="abc"; permute(s,3); return 0; }
相关文章推荐
- 用递归求解全排列问题(个人理解)
- 递归解决输出一个字符串的全排列问题(缺陷:没有考虑字符串中字符重复的问题)
- 多个数组间元素排列组合问题求解(Java实现) 标签: 递归排列组合循环
- 全排列问题之递归求解
- 字符串全排列问题(递归解决有重复字符问题)
- 约瑟夫环问题的两种解决方式(递归求解和数组模拟求解)
- 全排列问题之递归求解
- 全排列问题之递归求解
- C语言进阶-第6讲:递归法问题求解(递归求数组的最大值)
- 由erlang的递归理解数组的全排列问题
- 与内存对齐,字符数组求sizeof相关的一些问题
- 《算法之美》の递归与分治策略の全排列问题
- 字符数组输出的问题
- 字符数组的输出问题
- 分治法求解最大子数组问题
- 递归求解汉诺塔问题
- 求解最大子数组问题 -- 暴力求解 和 分治法求解
- 递归--任意字符全排列(第二次写)
- 字符数组中关于strlen的问题(未初始化)
- N 皇后问题 —— 递归求解