输入
abc
输出
abc
acb
bac
bca
cab
cba
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
void swap(char c[],int i,int j)
{
char temp;
temp = c[i];
c[i] = c[j];
c[j] = temp;
}
void combination(char c[],int low,int high)
{
char flag[256] = {0};
if(low==high)
{
printf("%s\n",c);
return ;
}
int i=0;
for (i = low; i <= high; i++)
{
if(flag[c[i]]!=1)//重复字符不进行交换
{
swap(c,low, i);
//printf("%s\n",c);
combination(c, low+1, high);
swap(c,low,i); //将原来的交换还原,以保证依次将每个字符换到首位进行。
flag[c[i]]=1;
}
}
}
int main()
{
//测试使用
//char str[] = {'a','b','c','\0'};//'\0'zizi字符串结束符不可省略,
//控制台输入代码
char str1[MAXSIZE];
scanf("%s",str1);
combination(str1,0,strlen(str1)-1);
//combination(str,0,strlen(str)-1);
return 0;
}