/*******
这种全排序的思路就是
i 与 (i, n)区域内的数依次进行交换
然后 i+1;
地归 直到 i == n
***********/
#include<iostream>
#include<cstdio>
using namespace std;
long num[50];
void Swap(long *p, long *q)
{
int temp = *p;
*p = *q;
*q = temp;
}
int n;
void perm(int left, int right)
{
if(left == right)
{
int j;
for(j = 0;j < n;j++)
{
if(j < n-1)printf("%ld,", num[j]);
else printf("%ld\n", num[j]);
}
}
int j;
for(j = left;j <=right;j++)
{
Swap(&num[left], &num[j]);
perm(left+1, right);
Swap(&num[left], &num[j]);
}
}
int main()
{
int T;
cin>>T;
while(T--)
{
scanf("%d", &n);
int i;
for(i = 0;i < n;i++)
{
cin>>num[i];
}
perm(0, n-1);
}
return 0;
}
全排列
最新推荐文章于 2024-08-26 17:23:16 发布