递归解决全排列问题

#include <bits/stdc++.h>
using namespace std;
void Perm(char list[],int index,int len)
{
    int i=0 ;
    char tmp ;
    if(index==len)
    {
        for(i=0;i<len;i++)
        {
            cout<<list[i]<<"," ;
        }
        cout<<endl ;
    }
    else
    {
        for(i=index;i<len;i++)
        {
            swap(list[index],list[i]);
            Perm(list,index+1,len) ;
            swap(list[index],list[i]);
        }
    }
}
int main()
{
    char tmp[]={‘1‘,‘2‘,‘3‘,‘4‘} ;
    Perm(tmp,0,4) ;
    return 0 ;
}

  

时间: 2024-10-10 18:05:18

递归解决全排列问题的相关文章

递归解决全排列生成算法

排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列: 全排列:当n==m时,称为全排列: 比如:集合{ 1,2,3}的全排列为: { 1 2 3} { 1 3 2 } { 2 1 3 } { 2 3 1 } { 3 2 1 } { 3 1 2 } 方法一: 我们可以将这个排列问题画成图形表示,即排列枚举树,比如下图为{1,2,3}的排列枚举树,此树和我们这里介绍的算法完全一致: 算法思路: (1)n个元素的全排列=(n-1个元素的全排列)+(另一个元素作为前缀): (2)出口:如

递归解决全排列算法

排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列: 全排列:当n==m时,称为全排列: 比如:集合{ 1,2,3}的全排列为: { 1 2 3} { 1 3 2 } { 2 1 3 } { 2 3 1 } { 3 2 1 } { 3 1 2 } 我们可以将这个排列问题画成图形表示,即排列枚举树,比如下图为{1,2,3}的排列枚举树,此树和我们这里介绍的算法完全一致: 算法思路: (1)n个元素的全排列=(n-1个元素的全排列)+(另一个元素作为前缀): (2)出口:如果只有一个

汉诺塔递归解决方法经典分析

一位法国数学家曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔.不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面.僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔.庙宇和众生也都将同归于尽. 虽然这只是一个传说,但也给我们提出了一个问题,

递归解决换零钱问题--回顾总结之递归的表达能力

前面为了保持叙述的流畅,没有做太多的引申,把总结推迟到了后面. 补上一些总结,以防止出现"下面呢?下面没有了"的尴尬. 方向性问题 虽然题目在一开始就暗示了这一点,但首先,我们还是要问,它能用递归解决吗? 有点怀疑精神是好的,既要低头走路,更要抬头看路,以防止发生方向性错误,导致缘木求鱼的后果. 说这个问题能用递归解决,这种信心或者判断的依据来自于哪呢? 有人可能知道了,换零钱这个问题在<计算机程序的构造和解释>(SICP:Structure and Interpretat

Java使用递归实现全排列的代码

将写内容过程经常用到的一些内容备份一下,下边内容是关于Java使用递归实现全排列的内容. public class AllPermutation { public static void main(String[] args) { char[] source=new char[]{'A','B','C'}; char[] result=new char[source.length]; allPermutation(0,source,result); } public static void al

使用递归解决一些问题

1:字符串反转 "abcde"=>"edcba" 直接贴代码: private static String f(String str) {  if(str.length()==0) return"";  return f(str.substring(1))+str.charAt(0); } 2:将 ABCD全排列 分析: A B C D 对于以上递归我们只要找到解决问题的相似处,然后在找到出口,即可解决.对于该问题,我们试着将A与其他元素依

用DFS 解决全排列问题的思想详解

首先考虑一道奥数题目: □□□ + □□□ = □□□,要将数字1~9分别填入9个□中,使得等式成立.例如173+286 = 459.请输出所有合理的组合的个数. 我们或许可以枚举每一位上所有的数,然后判断每一位上的数需要互不相等且满足等式即可,但是用代码写出来需要声明9个变量且判断. 那么我们把这个问题考虑为一个求这个9个数的全排列问题,即可得到更优雅的解答方式. 首先我们考虑一个经典的全排列问题(<啊哈,算法>): 输入一个数,输出1~n的全排列. 现在我们考虑有1.2.3的3张扑克牌和编

递归之全排列问题

一.问题描述 如输入一个字符串abc,其中的元素都不一样,则根据数学知识很容易得知道它的全排列有n!=3!=6; 即abc;acb;bac;bca;cab;cba; 当然如果包含重复元素,如aab,实际的全排列是:aab;aba;baa三种,则需要剔除掉重复的情况. 这里我们就是研究如何准确无误的将其所有的排列进行统计以及显示等. 二.问题分析 对全排列问题而言,其过程可以理解为递归思想.如abc,我们先任意取一个元素如a,则对bc进行全排列,依次类推 直到最后只有一个元素全排列,即是它本身.

算法之使用递归求解全排列

在python中有一个模块叫做itertools,使用这个模块能够快速的求解排列组合问题,刚好朋友问到怎么求全排列问题,不能用内置模块去做,于是...自己想了想逻辑,使用递归实现比较简单. 下面是简单的实现代码: 1 #!/usr/bin/env python 2 # encoding:utf-8 3 # __author__: huxianglin 4 # date: 2016/9/25 12:09 5 # blog: http://huxianglin.cnblogs.com/ http:/