一、题目描述

在这里插入图片描述

二、思路分析

若R = {1, 2, 3} 对应的全排列就是
1 3 2
2 1 3
2 3 1
3 2 1
3 1 2

进行层次分析:
R0 Perm(R)

三、递归程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<iostream>
using namespace std;
#if 1
void Perm(int* arr, int left, int right)
{
if (left == right)
{
//确定只剩下一个元素时
for (int i = 0; i <= right; ++i)
{
cout << arr[i] << " ";
}
cout << endl;
}
else
{
//需要确定相对首元素
for (int i = left; i <= right; ++i)
{
swap(arr[left], arr[i]);
Perm(arr, left + 1, right);
swap(arr[left], arr[i]);
}
}
}

int main()
{
int arr[] = {1 ,2 ,3};
int len = sizeof(arr) / sizeof(arr[0]);
Perm(arr, 0, len - 1);
return 0;
}

#endif

在这里插入图片描述