欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【TOJ 2621】全排列(STL的next_permutation)

程序员文章站 2022-07-09 18:05:36
关于元素全排列(STL的next_permutation函数运用) ......

描述

任意输入n个不重复的整数序列,输出序列的全排列。

输入

测试数据有多组,第一行是整数t(0<t<20),代表测试组数。每组测试数据有两行,第一行是整数的个数n(0<n<6),第二行是n个不重复的整数。

输出

按递增的顺序输出序列的全排列。每个测试数据后面输出一个空行。

样例输入

1
3
1 3 5

样例输出

1 3 5
1 5 3
3 1 5
3 5 1
5 1 3
5 3 1

#include<iostream>
#include<algorithm>
using namespace std;
int cmp(int a,int b)  
{  
    return a<b;  
}  
int main()  
{  
    int a[100],t,n,i;  
    cin>>t;
    while(t--)  
    {  
        cin>>n; 
        for(i=0;i<n;i++)    
            scanf("%d",&a[i]);   
             
        sort(a,a+n,cmp);               //一定要先将数组元素从小到大排序
        for(i=0;i<n;i++)               //先把第一个(完全从小到大)的排序输出
        {  
            if(i!=n-1)  
            printf("%d ",a[i]);  
            else   
            printf("%d\n",a[i]);  
        }  
        while(next_permutation(a,a+n)) //每一次都会重新排列一次,直到排列为完全从大到小
        {  
            for(i=0;i<n;i++)  
             {  
                if(i!=n-1)printf("%d ",a[i]);  
                else printf("%d\n",a[i]);  
            }  
        }     
        cout<<endl;
    }  
}