2014年3月20日 星期四

C語言 - 字串組合 使用遞迴

# Loop1
0 0 (abc)
        # Loop2    
        1 1 (abc)
                # Loop3
                2 2 (abc)
        1 2 (acb)
                2 2 (acb)
0 1 (bac)
        1 1 (bac)
                2 2 (bac)
        1 2 (bca)
                2 2 (bca)
0 2 (cba)
        1 1 (cba)
                2 2 (cba)
        1 2 (cab)
                2 2 (cab)
#include <stdio.h>
#include <math.h>

int perm(char *list, int i, int n);

int main(int argc, char *argv[])
{
    int i, n;
    char list[] = {'a', 'b', 'c'};

    i = 0;
    n = (sizeof(list) / sizeof(list[0])) - 1;

    perm(list, i, n);

    printf("\n");
    return 0;
}
#define SWAP(x, y, t) ((t) = (x), (x) = (y), (y) = (t))
int perm(char *list, int i, int n)
{
    int j, temp;
    if (i == n) {
        for (j = 0; j <= n; j++)
            printf("%c", list[j]);
            printf(" ");
    } else {
        for (j = i; j <= n; j++) {
            SWAP(list[i], list[j], temp);
            perm(list, i + 1, n);
            SWAP(list[i], list[j], temp);
        }
    }
}

沒有留言:

張貼留言