(DS1.5.9)POJ 1833 排列(生成当前排列的下一排列)

2014-11-24 00:40:37 · 作者: · 浏览: 3
 
/* 
 * POJ_1833.cpp 
 * 
 *  Created on: 2013年10月24日 
 *      Author: Administrator 
 */  
#include   
#include   
#include   
  
using namespace std;  
  
int a[1100];  
int main() {  
    int t;  
    scanf("%d", &t);  
    while (t--) {  
        int n, k;  
  
        scanf("%d%d", &n, &k);  
  
        int i, j;  
        for (i = 0; i < n; ++i) {  
            scanf("%d", &a[i]);  
        }  
  
        for (i = 0; i < k; ++i) {  
            /** 
             * 如果这个已经是最后一个排列,则变成第一个排列 
             * next_permutation(a, a + n) :生成当前排列的下一个排列. 
             * 如果返回0,则代表已经是最后一个排列.否则表示生成下一个排列成功 
             */  
            if (next_permutation(a, a + n) == 0) {  
                for (j = 0; j < n; ++j) {  
                    a[j] = j + 1;  
                }  
            }  
        }  
  
        for (i = 0; i < n - 1; ++i) {  
            printf("%d ", a[i]);  
        }  
        printf("%d\n", a[n - 1]);  
    }  
  
    return 0;  
}