美文网首页程序员
算法学习-全排列

算法学习-全排列

作者: vincentgemini | 来源:发表于2017-11-16 23:24 被阅读0次

核心思想是交换,具体来说,对于一个长度为n的串,要得到其所有排列,我们可以这样做:
1.把当前位上的元素依次与其后的所有元素进行交换;
2.对下一位做相同处理,直到当前位是最后一位为止,输出序列;

需要注意的一点:思想是“交换”,也就是直接对原数据进行修改,那么在交换之后一定还要再换回来,否则原数据就发生变化了,肯定会出错

如果觉得上面的解释还是很难懂的话,那么记住这句话:核心思想就是让你后面的所有人都和你交换一遍(而你是一个指针,从前向后按位移动...)

void swap(int *a, int *b)
{    
    int m;    
    m = *a;    
    *a = *b;    
    *b = m;
} 

void perm(int list[], int k, int m)
{    
    int i;    
    if(k > m)    
    {         
        for(i = 0; i <= m; i++)            
            printf("%d ", list[i]);        
        printf("\n");        
    }    
    else    
    {        
        for(i = k; i <= m; i++)        
        {            
            swap(&list[k], &list[i]);            
            perm(list, k + 1, m);            
            swap(&list[k], &list[i]);        
        }    
    }
} 

相关文章

  • 算法学习-全排列

    核心思想是交换,具体来说,对于一个长度为n的串,要得到其所有排列,我们可以这样做:1.把当前位上的元素依次与其后的...

  • 46. Permutations

    算法 1: 递归数组 的全排列,等价于全排列与可能的取值组合得到。 算法 2: 计算一个排列 按字典升序排列的紧...

  • 全排列与字典序

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

  • 全排列算法

    参考资料 先上代码,实现非常简洁 输出 主要思路 在此树中,每一个从树根到叶子节点的路径,就对应了集合A的一个排列...

  • 全排列算法

    4个数的全排列 结果 任务分配问题

  • 全排列算法

    问题: 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,...

  • 全排列算法

    题目:给定元素a,b,a,b,c,c,d,求解出所有的排列。思路:首先这道题的算法是一个比较经典的算法,它并不是使...

  • 全排列算法

    代码实现 参考资料 全排列算法 - bilibili.com

  • 全排列算法

    问题描述: 对于一个给定的序列 a = [a1, a2, a3, … , an],请设计一个算法,用于输出这个序列...

  • 全排列算法

    全排列的定义见全排列.这里我们详细讲一下交换法和字典序法 交换法 举个简单的例子,假设我们要对1234进行全排列1...

网友评论

    本文标题:算法学习-全排列

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