含有重复字符的字符串全排列

//全排列的递归实现
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

void swi(char *a,char *b){
    char temp;
    temp = *a;
    *a = *b;
    *b = temp;
}
bool Ischange(char *a,int begin,int end){
    for(int i=begin; i<end; i++)
        if(a[i]==a[end])
            return false;
    return true;
}
void full(char *a,int begin, int end){
    if(begin==end){
        static int s = 1;
        printf("%3d次\t%s\n",s++,a);
    }
    else{
        for(int i=begin; i<=end; i++){
            if(Ischange(a,begin,i)){
                swi(a+i,a+begin);
                full(a,begin+1,end);
                swi(a+i,a+begin);
            }
        }
    }


}

int main(){
    static int k = 1;
    char a[] = "123";
    full(a,0,3);
    return 0;
}

 

posted @ 2017-03-09 09:23  kuqs(奇小东)  阅读(276)  评论(0)    收藏  举报