Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<string.h>
- void swap(char *a,char *b)
- {
- if( *a == *b )
- return;
- *a^=*b;
- *b^=*a;
- *a^=*b;
- }
- void rev(char *s,int l,int r)
- {
- while(l < r)
- swap(&s[l++], &s[r--]);
- }
- int bsearch (char *s,int l,int r,int key)
- {
- int index = -1;
- while(l<=r)
- {
- int mid = l+(r-l)/2;
- if(s[mid]<=key)
- r=mid-1;
- else
- {
- l=mid+1;
- if(index = -1 || s[index]<=s[mid])
- index = mid;
- }
- }
- return index;
- }
- int nextpermutation(char *s)
- {
- int len = strlen(s);
- int i=len-2;
- while(i>=0 && s[i]>=s[i+1])
- --i;
- if(i<0)
- return 0;
- else
- {
- int index=bsearch(s,i+1,len-1,s[i]);
- swap(&s[i],&s[index]);
- rev(s,i+1,len-1);
- return 1;
- }
- }
- void sort(char *s){
- int i,j;
- char temp;
- int n = strlen(s);
- for (i=0; i < n-1; i++)
- {
- for (j=i+1; j<n; j++)
- {
- if (s[i] > s[j])
- {
- temp = s[i];
- s[i] = s[j];
- s[j] = temp;
- }
- }
- }
- }
- void print_reverse(char *s){
- int n = strlen(s);
- int i;
- for(i = n-1; i >= 0; i--)
- printf("%c",s[i]);
- }
- void printPermutations(char *s, int len){
- int i;
- int length = len/2 + 1;
- char s1[length];
- char mid;
- for(i = 0; i < length -1; i++)
- s1[i] = s[i];
- s1[i] = '\0';
- sort(s1);
- int val = 1;
- while(val != 0){
- printf("%s",s1);
- if(len % 2 != 0)
- printf("%c",s[len/2]);
- print_reverse(s1);
- printf("\n");
- val = nextpermutation(s1);
- }
- }
- int main ()
- {
- int n, len;
- char s[100];
- scanf("%d",&n);
- while(n--){
- scanf("%s",s);
- len = strlen(s);
- printPermutations(s, len);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement