C++实现全排列
#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 << "請(qǐng)輸入有多少個(gè)元素:";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) //這里相當(dāng)于遞歸算法,
{//道理start=end時(shí),就相當(dāng)于這次遞歸結(jié)束,找到了一個(gè)排列組合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]);//假設(shè)3,4,5為例,3P(4,5)是已經(jīng)一個(gè)組合,后面則是4P(3,5),5P(3,4),因此需要交換一下Perm(start + 1, end, arr);//相當(dāng)于P(4,5)swap(arr[i], arr[start]);//回溯,把順序還原,不然就破壞了數(shù)據(jù),排列就進(jìn)行不下去了}
}
總結(jié)
- 上一篇: 在字符串末尾添加字符使其成为回文串
- 下一篇: C++实现字符全排列