#include <iostream>
using namespace std;
void output(char d[],int n) // 输出
{
for (int i=0;i<n;i++)
cout<<d[i];
cout<<" ";
}
void swap(char &x, char &y) //交换
{
char t = x;
x = y;
y = t;
}
void perm(char d[],int n,int j) // j起始下标
{
if (j==n)
output(d,n); // 输出
else
for (int i=j;i<n;i++) {
if (i!=j)
swap(d[j],d[i]); // 交换
perm(d,n,j+1); //递归求排列
if (i!=j)
swap(d[j],d[i]);} // 恢复
}
int main()
{
char a[] = {'a','b','c','d','e','f','g','h','i','j','k','l',
'm','n','o','p','q','r','s','t','u','v','w','x','y','z'};
int n;
cout<<"请输入n:\n";
cin>>n;
perm(a,n,0);
cout<<endl;
system("pause");
return 0;
}
算法:1.将第一个字符,依次与后n-1个字符交换值,每次交换得到一个新的首字母;
2.剩下的n-1个字母按1步骤重复直至所有数组完成排列;
本回答被提问者采纳