所有的排列,但是要不重复
#include<stdio.h>
#include<iostream>
#include<sstream>
#include<queue>
#include<map>
#include<memory.h>
#include <math.h>
#include<time.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
#define N 12
int vis[N];
char a[N];
char b[N];
int length;
int n;
int final = 0;
void dfs(int cur)
{
if(cur == length)
{
for(int i = 0; i < cur; i++)
cout << b[i];
cout << endl;
return;
}
for(int i = 0; i < length; i++)
{
if(!i || a[i] != a[i - 1])
{
int c1 = 0, c2 = 0;
for(int j = 0; j < cur; j++)
if(b[j] == a[i])
c1++;
for(int j = 0; j < length; j++)
if(a[j] == a[i])
c2++;
if(c1 < c2)
{
b[cur] = a[i];
dfs(cur + 1);
}
}
}
}
void sort()
{
for(int i = 0; i < length; i++)
{
for(int j = 1; j < length - i; j++)
{
if(a[j] < a[j - 1])
{
char cc = a[j];
a[j] = a[j - 1];
a[j - 1] = cc;
}
}
}
}
int main(const int argc, char** argv)
{
freopen("d:\\1.txt", "r", stdin);
cin >> n;
while (n--)
{
memset(a, 0, sizeof(a));
scanf("%s", a);
length = strlen(a);
sort();
dfs(0);
//if(n != 0)
cout << endl;
}
return 0;
}
#include<stdio.h>
#include<iostream>
#include<sstream>
#include<queue>
#include<map>
#include<memory.h>
#include <math.h>
#include<time.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
#define N 12
int vis[N];
char a[N];
char b[N];
int length;
int n;
int final = 0;
void dfs(int cur)
{
if(cur == length)
{
for(int i = 0; i < cur; i++)
cout << b[i];
cout << endl;
return;
}
for(int i = 0; i < length; i++)
{
if(!i || a[i] != a[i - 1])
{
int c1 = 0, c2 = 0;
for(int j = 0; j < cur; j++)
if(b[j] == a[i])
c1++;
for(int j = 0; j < length; j++)
if(a[j] == a[i])
c2++;
if(c1 < c2)
{
b[cur] = a[i];
dfs(cur + 1);
}
}
}
}
void sort()
{
for(int i = 0; i < length; i++)
{
for(int j = 1; j < length - i; j++)
{
if(a[j] < a[j - 1])
{
char cc = a[j];
a[j] = a[j - 1];
a[j - 1] = cc;
}
}
}
}
int main(const int argc, char** argv)
{
freopen("d:\\1.txt", "r", stdin);
cin >> n;
while (n--)
{
memset(a, 0, sizeof(a));
scanf("%s", a);
length = strlen(a);
sort();
do
{
cout << a << endl;
} while (next_permutation(a, a + length));
cout << endl;
}
return 0;
}
想看库函数源码了。。。。。