1:暴力破解 求多少元素的全排列就写多少循环,最后添加if语句判断合适的条件语句打印
/暴力穷举法 例如输出1 2 3 的全排列
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 3;++j)
{
for (int k = 0; k < 3; ++k)
{
if (i != j && i != k && j != k)
{
cout << i+1<<" " << j+1<<" " << k+1 << endl;
}
}
}
}
这种做法写法很是繁琐,不建议使用。
2:递归求解
求n个元素的全排列需要先求出n-1个元素的全排列,递归终止条件就是到最后一个元素。
#include <iostream>
#include <cstring>
#define N 100
using namespace std;
void permutation(char* a, int k, int m)
{
int i, j;
if (k == m)//如果说:到达了最后一位的全排列,那么就开始打印 ,不是说一个数据一个数据打印的,而是排列好再打印
{
for (i = 0; i <= m; i++)
cout << a[i];
cout << endl;
}
else
{
for (j = k; j <= m; j++)
{
swap(a[j], a[k]);
permutation(a, k + 1, m);
swap(a[j], a[k]);//换回来
}
}
}
int main()
{
char a[N];
int n;
cin >> a;
n = strlen(a) - 1;
permutation(a, 0, n);
system("pause");
return 0;
}