#include <stdio.h>
Swap(int *q, int *r)//交换函数
{
int temp = *q;
*q = *r;
*r = temp;
}
void qpl(int a[], int s, int e)//s=start,e=end
// 数组 第一个元素 总长
{
int i;
if (s >= e)
{
for (i = 0; i < e; i++)
{
printf("%d-", a[i]);
}
printf("\n");
}
else
{
for (i = s; i < e; i++)
{
if (s != i)
{
Swap(&a[s], &a[i]);
printf("i=%d,s=%d 执行1\n",i,s);
}
qpl(a, s + 1, e);
if (s != i)
{
Swap(&a[s], &a[i]);
printf("i=%d,s=%d 执行2\n",i,s);
}
}
}
}
int main()
{
int a[30];
int i, n;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d",&a[i]);
}
qpl(a, 0, n);
return 0;
}
全排列(回溯递归法)
于 2020-03-31 21:57:39 首次发布