排列

void Permutation(int cnt, int n, char *str)
{
    if(!str || cnt<=0 || n<=0)
        return;
    static unsigned num=1;
    if(cnt==n)
    {
        printf("%u: %s\n", num++, str);
        for(int i=n-1; i>0; --i)
        {
            str[i]^=str[i-1];
            str[i-1]^=str[i];
            str[i]^=str[i-1];
            printf("%u: %s\n", num++, str);
        }
        for(int i=0; i         {
            str[i]^=str[i+1];
            str[i+1]^=str[i];
            str[i]^=str[i+1];
        }
    }
    else
    {
        Permutation(cnt+1, n, str);
        for(int i=cnt-1; i>0; --i)
        {
            str[i]^=str[i-1];
            str[i-1]^=str[i];
            str[i]^=str[i-1];
            Permutation(cnt+1, n, str);
        }
        for(int i=0; i         {
            str[i]^=str[i+1];
            str[i+1]^=str[i];
            str[i]^=str[i+1];
        }

    }

    if(cnt==1)
        num=1;

}

你可能感兴趣的:(排列)