遞迴-*全排列問題

HowieLee59發表於2019-03-30

Problem Description

從n個不同元素任取m(m<=n)個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的一個排列,當m=n時所有的排列情況叫全排列。現輸入n個遞增的數,請你輸出這n個數的全排列。全排列輸出順序如樣例所示。

Input

多組輸入。

首先輸入一個資料組數T(1<=T<=100)

接下來是T組資料。

每組資料有兩行。

第一行先輸入一個整數n(1<=n<=10)。

接下來是一行輸入n個由空格分開的互不相同的整數num(1<=num<=90000)。

Output

對於每組資料,每一種排列佔一行,各元素間用逗號隔開。

Sample Input

1
3
1 2 3

Sample Output

1,2,3
1,3,2
2,1,3
2,3,1
3,2,1
3,1,2
#include <stdio.h>
#include <stdlib.h>
void p(int a[],int k,int m)
{
    int i,t;
    if(k==m)
    {
        for(i=1;i<m;i++)
            printf("%d,",a[i]);
        printf("%d\n",a[m]);
    }
    else
    {
        for(i=k;i<=m;i++)
        {
            t=a[k];a[k]=a[i];a[i]=t;
            p(a,k+1,m);
            t=a[k];a[k]=a[i];a[i]=t;
        }
    }
}
int main()
{int t,n,i,a[11];
while(scanf("%d",&t)!=EOF)
{
    while(t--)
    {
        scanf("%d",&n);
        for(i=1;i<=n;i++)
            scanf("%d",&a[i]);
        p(a,1,n);
    }
}
    return 0;
}

 

相關文章