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

算法学习-全排列

作者: 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]);        
            }    
        }
    } 

    相关文章

      网友评论

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

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