当前位置:编程学习 > C/C++ >>

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

 
/* 
 * POJ_1833.cpp 
 * 
 *  Created on: 2013年10月24日 
 *      Author: Administrator 
 */  
#include <iostream>  
#include <cstdio>  
#include <algorithm>  
  
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;  
}  

 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,