pku1256

#pragma warning(disable:4786)
#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;

int t,len,num;
char s[15],s1[15];
bool used[15],sel[15];

int cmp(const void *a,const void *b){
 char ca=*(char*)a,cb=*(char*)b;
 int da,db;

 if(ca>='A'&&ca<='Z')
  da=(ca-'A')%26;
 else
  da=(ca-'a')%26;

 if(cb>='A'&&cb<='Z')
  db=(cb-'A')%26;
 else
  db=(cb-'a')%26; 

 if(da>db)
  return 1;
 else
  if(da<db){
   return -1;
  }
  else{
   return ca-cb;
  }
}

void DFS(int d){
 int i; 
 if(d==len){
  s1[len]=0;
  printf("%s/n",s1);
 }
 else{
  for(i=0;i<len;i++){
   if(!used[i]){
    if(s[i]==s1[d]){
     continue;
    }
    s1[d]=s[i]; used[i]=1; 
    DFS(d+1);
    used[i]=0; 
   }
  }
  s1[d]=0;//置为0,以免影响下一轮
 }
}

int main()
{
 int i;
 scanf("%d",&t);
 for(i=0;i<t;i++){
  scanf("%s",s); len=strlen(s);
  qsort(s,len,1,cmp);
  num=1;
  memset(s1,0,15); memset(used,0,15); 
  DFS(0);
 }
 return 1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值