#include <iostream>
#include<vector>
#include<string>
#include <unordered_map>
#include <unordered_set>
#include <map>
#include <queue>
#include <algorithm>//算法头文件
#include <numeric>
#include <stack>
#include<typeinfo>
#include<regex>
#include<stdio.h>
#include <stdlib.h>
#include <crtdbg.h>
#include <thread>
//#include<bits/stdc++.h>
using namespace std;
void Perm(int start, int end, vector<int>& arr);
int main()
{
int n;
cout << "请输入有多少个元素:";
cin >> n;
int a;
vector<int> arr;
for (int i = 0; i < n; i++)
{
cin >> a;
arr.push_back(a);
}
Perm(0, n, arr);
return 0;
}
void Perm(int start, int end, vector<int>& arr) //这里相当于递归算法,
{
//道理start=end时,就相当于这次递归结束,找到了一个排列组合
if (start == end)
{
for (int i = 0; i < end; i++)
{
cout << arr[i] << " ";
}
cout << endl;
return;
}
for (int i = start; i < end; i++)
{
swap(arr[start], arr[i]);//假设3,4,5为例,3P(4,5)是已经一个组合,后面则是4P(3,5),5P(3,4),因此需要交换一下
Perm(start + 1, end, arr);//相当于P(4,5)
swap(arr[i], arr[start]);//回溯,把顺序还原,不然就破坏了数据,排列就进行不下去了
}
}
C++实现全排列
最新推荐文章于 2024-08-04 08:42:07 发布