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

递归思想实现选排

阅读更多
#include <stdio.h>

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

/*
 * 递归思想实现选排,不可重复
 */
void Perm(char *list, int k, int m, int s)
{
    //从list数组中k以后的子串中选排m个元素.s是总的选排个数
    int i;
    if(k == s || m == 0) {//已经选排完成,输出这个排列方式
        for(i=0;i<s;i++)putchar(list[i]);
        putchar('\n');
    }
    else
    {
        for (i=k; list[i]!='\0'; i++) {
            Swap (&list[k], &list[i]);
            Perm (list, k+1, m-1,s);//排列右子串

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

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics