(组合数学3.1.1.2)UVA 10098 Generating Fast(使用字典序思想产生所有序列)

2014-11-23 23:30:13 · 作者: · 浏览: 11
/* 
 * UVA_10098.cpp 
 * 
 *  Created on: 2013年10月8日 
 *      Author: Administrator 
 */  
  
#include   
#include   
#include   
#include   
  
using namespace std;  
  
char s[11];  
int l;  
  
bool get() {  
    int i = l - 1;  
    int j;  
    while (i > 0 && s[i - 1] >= s[i]) {  
        --i;  
    }  
    if (!i) {  
        return 0;  
    }  
  
    int mp = i;  
    for (j = i + 1; j < l; ++j) {  
        if (s[i - 1] >= s[j]) {  
            continue;  
        }  
  
        if (s[mp] >
s[j]) { mp = j; } } swap(s[mp], s[i - 1]); sort(s + i, s + l); return 1; } int main() { int t; scanf("%d", &t); while (t--) { scanf("%s", s); l = strlen(s); sort(s, s + l); printf("%s\n", s); while (get()) { printf("%s\n", s); } printf("\n"); } return 0; }