全排列

求一个字符串S的全排列.

假设字符串的长度为N。问题可以分解为确定了第一个字符,求后面N-1个字符的全排列递归来解决。递归的关键在于第一个字符有N种选择。

递归表达式为T(N) = N * T(N-1), T(1) =1

 

void swap(char *a, char *b)
{
        char c;
        if (a == b)
            return;

         c = *a;
        *a = *b;
        *b = c;
}

void func(char *s)
{
        int    i, len = strlen(s);
        
        if (len == 1)
            return;
          
        for (i = 0; i < len; i++)
        {
            swap(s, s + i);
            func(s + 1);
            swap(s, s +i);
        }
}
View Code

 

 

posted @ 2013-10-16 21:09  Homura  阅读(131)  评论(0编辑  收藏  举报