`
CreazyApple
  • 浏览: 64876 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

递归思想实现全排列

 
阅读更多
#include <stdio.h>

int Swap(char *a,char *b)
{
    char c;
    c = *a;
    *a = *b;
    *b = c;
}

/*
 * 递归思想实现全排列
 * 对abc进行全排列,那么可以看做:ab的全排列+c和ac的全排列+b和bc的全排列+a三个的组合
 */
void Perm(char *list, int k)
{
    //排列list数组中k以后的子串
    int i;
    if ('\0' == list[k]) {//输出一个排列方式
        printf("%s\t",list);
        putchar('\n');
    }
    else
    {
        for (i=k; list[i]!='\0'; i++) {
            Swap (&list[k], &list[i]);
            Perm (list, k+1);//全排列右子串

            Swap (&list [k], &list [i]);
        }
    }
}

int main(int argc ,char *argv[])
{
    char string[10] = "123";
    Perm(string,0);
    return 0;
}

分享到:
评论

相关推荐

    递归实现全排列

    在具体的实现过程中,我们通常采用深度优先搜索(DFS)的思想,通过交换元素的位置来实现全排列的生成。以下是一个使用C语言实现的示例代码: ```c #include int g_count = 1; int g_n = 0; // 打印结果函数 void...

    全排列——递归排序和字典序列

    本文将详细介绍两种实现全排列的方法:递归排列和字典序排列,并通过具体的代码示例来加深理解。 #### 一、递归排列 递归排列是一种直观且易于实现的方法。其基本思路是从集合中依次选取每一个元素作为排列的第一...

    全排列(阶乘)输出程序

    在C++中,实现全排列通常会借助递归的思想。递归是一种函数或过程调用自身的技术,它可以用来解决复杂的问题,尤其适用于处理具有分治特性的任务,如全排列。全排列的递归算法通常基于以下两个步骤: 1. **基本情况...

    JAVA用递归实现全排列算法的示例代码

    "JAVA用递归实现全排列算法的示例代码" JAVA用递归实现全排列算法的示例代码主要介绍了JAVA用递归实现全排列算法的相关资料。全排列算法是一种经典的算法,在数学和计算机科学领域中有着广泛的应用。该算法的主要...

    python非递归全排列实现方法

    本文介绍了一种非递归方式实现全排列的方法,通过具体的代码示例详细阐述了其实现细节。相较于递归实现,该方法避免了递归带来的栈空间限制问题,更加适用于大规模数据处理。此外,通过对字符串和列表的操作,使得...

    java 算法设计

    这个方法基于递归思想实现全排列。核心函数`fullPermutation`接受两个参数,一个是源字符向量`sourse`,另一个是当前已排列的字符向量`result`。当源向量为空时,表示已经完成了一种排列,此时将`result`打印出来并...

    python递归全排列实现方法

    递归思想: 取出数组中第一个元素放到最后,即a[1]与a[n]交换,然后递归求a[n-1]的全排列 1)如果数组只有一个元素n=1,a={1} 则全排列就是{1} 2)如果数组有两个元素n=2,a={1,2} 则全排列是: {2,1}–a[1]与a[2

    C语言全排列的递归算法

    总之,全排列的递归算法是C语言编程中一种重要的算法实现,通过理解递归思想和巧妙地处理数组元素,我们可以有效地解决这类问题。同时,掌握这一算法也对理解和解决更复杂的算法问题有着积极的帮助。

    N个数全排列的非递归算法

    在提供的文件名称“新建 文本文档.cpp”中,我们可以推测这是一个C++语言的源代码文件,它很可能包含了实现全排列非递归算法的代码。C++是一种强大的面向对象编程语言,非常适合处理这种需要高效计算的问题。 ...

    不得不说的全排列算法递归实现

    此外,还需要注意编程语言的特性,比如一些语言提供的库函数可以直接用于生成全排列,但理解和掌握递归实现全排列算法对学习算法思想具有重要意义。 递归算法虽然概念上简单易懂,但是在理解和使用上往往需要一定的...

    全排列算法的非递归实现与递归实现的方法(C++)

    在C++中,我们可以使用非递归和递归两种方法实现全排列算法。 ### 非递归全排列算法 非递归实现的核心思想是通过不断调整已排序的序列,找到下一个更大的排列。算法主要分为以下几步: 1. 找到当前排列中的最小...

    全排列C++实现

    全排列是计算机科学中一种常见的算法问题,主要应用于数据处理、搜索优化以及组合数学等领域。在C++中,我们可以利用递归和穷尽法来解决全排列问题。...根据具体的应用场景,开发者可以选择合适的方法来实现全排列。

    如何通过python实现全排列

    总之,Python提供了多种实现全排列的方法,包括使用内置的`itertools`模块以及通过递归或基于下降二叉树的算法。理解这些算法有助于提升编程能力,解决实际问题。希望这个详细的解释对你的学习或工作有所帮助。

    C#实现解决全排列重复问题

    在编程领域,全排列是一个经典的算法问题,它涉及到如何生成一个序列的所有可能排列方式。...理解并实现全排列算法有助于提升程序员在处理组合与排列问题时的思维能力,是编程技能的重要组成部分。

    全排列算法实现(java\c#\c++,各种主流语言版本)

    在本例中,我们将讨论如何使用递归方法实现全排列,以Java、C#、C++等主流编程语言为例。 全排列算法的核心思想是通过递归地交换元素来生成所有可能的序列。假设我们有一个包含n个不同元素的数组,全排列的数量是n...

    全排列的算法 翻转法 换位法 字典序法

    翻转法是一种基于回溯思想的全排列算法。基本思路是从第一个元素开始,每次选择一个未使用的元素放置在当前排列的末尾,然后递归地对剩余元素进行全排列。当所有元素都被使用过且已形成一个合法排列时,返回结果。在...

    全排列(多种算法实现)

    全排列是计算机科学中一种常见的算法问题,主要涉及组合数学和递归思想。在编程中,全排列通常指的是给定一个包含n个不同元素的序列,找出所有可能的n!种排列方式。这个问题广泛应用于数据处理、数据分析以及各种...

    组合数学全排列生成算法

    本项目提供了C语言实现的四种常见全排列生成算法,分别是字典序法、循环左移、循环右移以及邻位对换方法。 1. **字典序法**: 字典序法是一种按照特定顺序(通常是最小到最大)生成排列的方法。在C语言中,可以...

    C语言实现全排列算法模板的方法

    在本文中,我们将通过示例代码介绍C语言实现全排列算法模板的方法,着重强调递归思路和 Swap 函数的实现细节。读者可以通过学习本文,掌握全排列算法的实现过程,并应用于实际项目中。 1. 什么是全排列算法? ...

Global site tag (gtag.js) - Google Analytics