如何将一个集合进行全排列?
我的代码是:
#include<iostream>
#include<cstdio>
using namespace std;
void Prem(int list[],int k,int m)
{
if(k<m) //将第k至m个元素进行全排列
for(int j=k;j<=m;j++)
{
swap(list[k],list[j]); //将第j个元素与第k个元素交换作为前缀
Prem(list,k+1,m);
swap(list[k],list[j]); //将交换的元素交换回来,为了不影响下一个排列可能。
}
else //此时为此次排序的最后一步,可以将此次排序输出好进行下一个排序
{
for(int i=0;i<=m;i++)
cout<<list[i]<<' ';
cout<<endl;
}
}
int main()
{
int n,i;
cout<<"请输入list集合的元素个数:";
cin>>n;
int list[n];
cout<<"请输入list集合的元素:"<<endl;
for(i=0;i<n;i++)
cin>>list[i];
int k,m;
cout<<"请输入k和m"<<endl;
cin>>k>>m;
cout<<"全排列为:"<<endl;
Prem(list,k-1,m-1);
}
分析:
全排列就是将元素一个个递归提前。
```
有什么问题吗?确实是实现了全排列啊