请用c++程序实现——全排列

来源:百度知道 编辑:UC知道 时间:2024/07/02 13:17:46
描述
升序输出1~n的全排列。(分析时间复杂度,用大O表示)
输入
第一行为一个整数T,表示数据的组数。
以下每行表示每组测试数据,为一整数n(0<n<=8),表示全排列的元素为1至n。
输出
升序输出1~n的全排列。
每种排列一行,每行内的数字之间用一个空格隔开。
样例输入
2
2
3
样例输出
1 2
2 1
1 2 3
1 3 2
2 1 3
2 3 1
3 2 1
3 1 2
请用c++程序实现

#include <iostream.h>
void swap(int *a,int x,int y)//数据交换
{
int temp = a[x];
a[x] = a[y];
a[y] = temp;
}
void Perm(int *a,int k,int m)//实现全排序
{
if ( k ==m)
{
for (int i=0;i<=m;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
else
{
for (int j =k;j<=m;j++)
{
swap(a,k,j);
Perm(a,k+1,m);
swap(a,k,j);
}
}
}
int main()
{
int n,n1,n2,i=0;
int k;
cin>>n;
int *arr1 = new int[n];
for (k = 0;k<n;k++)
{
cin>>arr1[k];
}
for (k=0;k<n;k++)
{
int *arr = new int[arr1[k]];
for (int j = 0;j<arr1[k];j++)
{
arr[j] = j+1;
}
Perm(arr,0,arr1[k]-1);
delete []arr;
}
return 0;
}
//OK,能满足你的要求了

用STL可以吗?下面的是用STL做的,next_permutation()为我们提供了现成的算法。