美文网首页
C语言递归实现全排列Perm

C语言递归实现全排列Perm

作者: 闫品品 | 来源:发表于2019-03-28 10:46 被阅读0次

就是第一个数分别以后面的数进行交换

假设输入E = (a , b , c),

则 perm(E)= a.perm(b,c)+ b.perm(a,c)+ c.perm(a,b)

然后a.perm(b,c)= ab.perm(c)+ ac.perm(b)= abc + acb.依次递归进行

#include <stdio.h>

#define SWAP(x, y, t) ((t) = (x), (x) = (y), (y) = (t))

void perm(char *list, int i, int n);

int main(int argc, const char * argv[]) {

    // insert code here...

    char list[] = "abcd";

    perm(list, 0, 3);

    return 0;

}

void perm(char *list, int i, int n){

    int j;

    if(i == n){

        for(j = 0; j <= n; j++){

            printf("%c", list[j]);

        }

        printf("    ");

    }

    else{

        for(j = i; j <= n; j++){

            swap(list[i], list[j]);

            perm(list, i + 1, n);

            swap(list[i], list[j]);

        }

    }

}

具体递归流程如下:

***perm(abcd), 0, 3***

         ***perm(abcd),1, 3***

                   ***perm(abcd),2, 3***

                            ***perm(abcd),3, 3***

                            abcd

                            ***perm(abdc),3, 3***

                            abdc

                   ***perm(acbd),2, 3***

                            ***perm(acbd),3, 3***

                            acbd

                            ***perm(acdb),3, 3***

                            acdb

                   ***perm(adcb),2, 3***

                            ***perm(adcb),3, 3***

                            adcb

                            ***perm(adbc),3, 3***

                            adbc

         ***perm(bacd),1, 3***

                   ***perm(bacd),2, 3***

                            ***perm(bacd),3, 3***

                            bacd

                            ***perm(badc),3, 3***

                            badc

                   ***perm(bcad),2, 3***

                            ***perm(bcad),3, 3***

                            bcad

                            ***perm(bcda),3, 3***

                            bcda

                   ***perm(bdca),2, 3***

                            ***perm(bdca),3, 3***

                            bdca

                            ***perm(bdac),3, 3***

                            bdac

         ***perm(cbad),1, 3***

                   ***perm(cbad),2, 3***

                            ***perm(cbad),3, 3***

                            cbad

                            ***perm(cbda),3, 3***

                            cbda

                   ***perm(cabd),2, 3***

                            ***perm(cabd),3, 3***

                            cabd

                            ***perm(cadb),3, 3***

                            cadb

                   ***perm(cdab),2, 3***

                            ***perm(cdab),3, 3***

                            cdab

                            ***perm(cdba),3, 3***

                            cdba

         ***perm(dbca),1, 3***

                   ***perm(dbca),2, 3***

                            ***perm(dbca),3, 3***

                            dbca

                            ***perm(dbac),3, 3***

                            dbac

                   ***perm(dcba),2, 3***

                            ***perm(dcba),3, 3***

                            dcba

                            ***perm(dcab),3, 3***

                            dcab

                   ***perm(dacb),2, 3***

                            ***perm(dacb),3, 3***

                            dacb

                            ***perm(dabc),3, 3***

                            dabc

Program ended with exit code: 0

相关文章

  • C语言递归实现全排列Perm

    就是第一个数分别以后面的数进行交换 假设输入E = (a , b , c), 则 perm(E)= a.perm(...

  • 全排列与字典序

    全排列 递归实现全排列; 首先来说递归算法实现全排列: 例如,对于{1,2,3,4}的例子进行全排列,其可以分解...

  • 全排列与全组合

    递归+交换值实现全排列 非重复的全排列 位运算实现全组和

  • Haskell 实现全排列

    用Haskell语言实现一个全排列,我们使用递归的思想: 定义这个函数名为permute :: [a] -> [[...

  • P254-字符串的排列

    排列总结: 字符串的全排列和组合算法 1.递归实现 2.非递归实现 qsort函数、sort函数 (精心整理篇) ...

  • c语言实现全排列

    1.源码实现 2.编译源码 3.运行及其结果

  • 数组全排列

    递归实现 库函数实现 获取所有元素的全排列:itertools.permutation(lst, n) ——n:...

  • 几种计算全排列的方法

    基于golang实现,有非并发实现和并发实现 递归 全排列问题,比如打印1-9的共9个字母的全排列。先输出1,然后...

  • C语言-全排列

  • 递归 实现数组全排列

    题目:给定一个字符数组: 要求打印出由a b c组成的全排列(即3!= 6个) ** 写在代码前: **想法是利用...

网友评论

      本文标题:C语言递归实现全排列Perm

      本文链接:https://www.haomeiwen.com/subject/ijgfbqtx.html