#include <iostream>
using namespace std;
// 不重复元素,递归,全排列
// 交换两个元素
inline void swap(char &c1, char &c2)
{
char ch = c1;
c1 = c2;
c2 = ch;
}
// 全排列,考虑了重复元素,递归
void allpailie(char *a, char *p, int n)
{
if (n == 1)
{
cout<<a<<endl;
return;
}
int i;
for (i=0; i<n; ++i)
{
#if 1
int j;
for (j=0; j<i; ++j)
if(p[i] == p[j])
break;
if (j<i)
continue;
#endif
swap(p[0], p[i]);
allpailie(a,p+1,n-1);
swap(p[0], p[i]);
}
}
// 逆序
void reversec(char *p, int a, int b)
{
int x=a, y =b;
while(a<b)
{
swap(p[a++],p[b--]);
}
}
// 下一个全排列,迭代版,考虑了重复元素
bool next_permutation(char *p, int n)
{
if(n<=1)
return true;
int i;
for (i=n-1; i>0; )
{
if (p[i] <= p[i-1])
--i;
else
break;
}
if (i == 0)
{
reversec(p,0,n-1);
return false;
}
{
int j = i-1;
int k;
for (k=n-1;k>j;--k)
if (p[k]>p[j])
break;
swap(p[j], p[k]);
reversec(p, j+1,n-1);
}
return true;
}
int cmp(const void*p1, const void *p2)
{
return *((char*)p1) > *((char*)p2);
}
int main()
{
char ch[] = "xxz";
allpailie(ch,ch, 3);
cout<<endl;
char chh[] = "xxz";
qsort(chh,3,sizeof(chh[0]),cmp);
do{
cout<<chh<<endl;
}while(next_permutation(chh,3));
return 0;
}
using namespace std;
// 不重复元素,递归,全排列
// 交换两个元素
inline void swap(char &c1, char &c2)
{
char ch = c1;
c1 = c2;
c2 = ch;
}
// 全排列,考虑了重复元素,递归
void allpailie(char *a, char *p, int n)
{
if (n == 1)
{
cout<<a<<endl;
return;
}
int i;
for (i=0; i<n; ++i)
{
#if 1
int j;
for (j=0; j<i; ++j)
if(p[i] == p[j])
break;
if (j<i)
continue;
#endif
swap(p[0], p[i]);
allpailie(a,p+1,n-1);
swap(p[0], p[i]);
}
}
// 逆序
void reversec(char *p, int a, int b)
{
int x=a, y =b;
while(a<b)
{
swap(p[a++],p[b--]);
}
}
// 下一个全排列,迭代版,考虑了重复元素
bool next_permutation(char *p, int n)
{
if(n<=1)
return true;
int i;
for (i=n-1; i>0; )
{
if (p[i] <= p[i-1])
--i;
else
break;
}
if (i == 0)
{
reversec(p,0,n-1);
return false;
}
{
int j = i-1;
int k;
for (k=n-1;k>j;--k)
if (p[k]>p[j])
break;
swap(p[j], p[k]);
reversec(p, j+1,n-1);
}
return true;
}
int cmp(const void*p1, const void *p2)
{
return *((char*)p1) > *((char*)p2);
}
int main()
{
char ch[] = "xxz";
allpailie(ch,ch, 3);
cout<<endl;
char chh[] = "xxz";
qsort(chh,3,sizeof(chh[0]),cmp);
do{
cout<<chh<<endl;
}while(next_permutation(chh,3));
return 0;
}