`
ackerman
  • 浏览: 76128 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

递归算法---字符串---全/部分组合和全排列

 
阅读更多

 

#include <stdio.h>
#include <string.h>
void combine(char *src, char *out,int rec, int start, int end)
{
        int i;
        if(start==end)
                return;
        for(i=start;i<end;i++){
                out[rec]=src[i];
                out[rec+1]='\0';
                printf("%s\n",out);
                combine(src,out,rec+1,i+1,end);
        }       
}       
int main(int argc, char *argv[])
{
        int len=strlen(argv[1]);
        char out[len];
        combine(argv[1],out,0,0,len);
        return 0;
}

 

/**
  *从字符串中取出n个的组合
  */
#include <stdio.h>
#include <string.h>
void combine(char *src,char *out,int start,int rec,int end, int n)
{

        int i;
        if(n>end)
                n=end;
        for(i=start;i<end;i++){
                out[rec]=src[i];
                if(n==1){
                        out[rec+1]='\0';
                        printf("%s\n",out);
                }else {
                        combine(src,out,i+1,rec+1,end,n-1);
                }
        }
}
int main(int argc, char *argv[])
{
        char out[strlen(argv[1])];
        combine(argv[1],out,0,0,strlen(argv[1]),atoi(argv[2]));
        return 0;
}
 

 

#include <stdio.h>
#include <string.h>
void arrange(char *src,int start,int end)
{
        int i;
        char tmp;
        if(start==end){
                printf("%s\n",src);
        }
        for(i=start;i<end;i++){
                tmp=src[start];src[start]=src[i];src[i]=tmp;
                arrange(src,start+1,end);
                tmp=src[start];src[start]=src[i];src[i]=tmp;
        }
}
int main(int argc, char *argv[])
{
        arrange(argv[1],0,strlen(argv[1]));
        return 0;
}
分享到:
评论

相关推荐

    递归算法实现随机串和全排列的生成

    在给定的“递归算法实现随机串和全排列的生成”主题中,我们将深入探讨递归在生成随机字符串和全排列问题中的应用。这里我们将主要关注递归的核心概念、如何生成随机字符串以及如何实现全排列,所有这些都是使用C#...

    Java递归实现字符串全排列与全组合

    Java递归实现字符串全排列与全组合是指使用Java语言通过递归算法实现字符串的全排列和全组合。全排列是指将字符串中的所有元素按照一定的顺序进行排列,而全组合是指将字符串中的所有元素按照一定的顺序进行组合。 ...

    22道数据结构算法面试题[归类].pdf

    - 字符串排序和全排列(perm函数):通过递归和回溯算法生成字符串的所有排列组合,并在完成排序的基础上调用。 - 字符串搜索(strstr函数):检测一个字符串是否包含在另一个字符串中,类似于C语言中的库函数。 - ...

    字符排序【排序算法】

    通过理解排序算法的基本原理、掌握常用的数据结构以及学习如何设计递归算法,程序员可以有效地解决这类问题。在实际应用中,根据具体需求选择合适的算法和数据结构,能够显著提高程序的效率和性能。

    ACM算法模板集史上最完整收藏版

    - 通过递归或迭代的方法生成所有可能的排列或组合。 - 在组合数学中有着重要应用。 14. **二维线段树**: - 扩展了一维线段树的功能,用于处理二维空间中的区间查询。 - 在计算机图形学等领域有着广泛应用。 ...

    ACM_算法模板

    这些数学概念在算法竞赛和复杂问题解决中非常关键,例如,斐波那契数列在动态规划和递归算法中经常被引用,而斯特林近似则用于大型组合问题的近似计算。 ### 大数模板与数论算法 - **大数模板**:处理超过常规整型...

    叶倩琳 201706061330 实验一1

    随着字符串长度的增加,递归算法的重复计算问题变得尤为突出,其时间复杂度高达O(n!)。尽管递归算法在逻辑上易于理解,但当处理大规模数据时,递归算法的效率远不如非递归算法。 非递归方法利用了STL(标准模板库)...

    上海交通大学ACM算法模板gai.pdf

    12. 字符串匹配(KMP算法):高效的字符串查找算法。 13. 全排列和全组合:生成所有可能的排列和组合。 14. 二维线段树:处理二维区间问题的扩展数据结构。 15. 稳定婚姻匹配:处理稳定匹配问题的算法。 16. 后缀...

Global site tag (gtag.js) - Google Analytics