|  | @@ -1,11 +1,13 @@
 | 
											
												
													
														|  |  #include <algorithm>
 |  |  #include <algorithm>
 | 
											
												
													
														|  | 
 |  | +#include <iostream>
 | 
											
												
													
														|  |  #include <vector>
 |  |  #include <vector>
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  #include "function.h"
 |  |  #include "function.h"
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -using namespace std;
 |  | 
 | 
											
												
													
														|  | 
 |  | +using std::vector; using std::swap; using std::ostream;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -bool isswap(vector<int> &arr, size_t beg, size_t end) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +// 检查beg与end之间有无重复值
 | 
											
												
													
														|  | 
 |  | +bool isdiff(vector<int> &arr, size_t beg, size_t end) {
 | 
											
												
													
														|  |    for (size_t i = beg; i < end; ++i) {
 |  |    for (size_t i = beg; i < end; ++i) {
 | 
											
												
													
														|  |      if (arr[i] == arr[end])
 |  |      if (arr[i] == arr[end])
 | 
											
												
													
														|  |        return false;
 |  |        return false;
 | 
											
										
											
												
													
														|  | @@ -13,16 +15,31 @@ bool isswap(vector<int> &arr, size_t beg, size_t end) {
 | 
											
												
													
														|  |    return true;
 |  |    return true;
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -void permutation(vector<int> &arr, size_t pos, size_t len, vector<vector<int>> &res){
 |  | 
 | 
											
												
													
														|  | 
 |  | +// 递归求全排列并存入vector<vector<int>>中
 | 
											
												
													
														|  | 
 |  | +void perm_r(vector<int> &arr, size_t pos, size_t len, vector<vector<int>> &res){
 | 
											
												
													
														|  |    if (pos == len) {
 |  |    if (pos == len) {
 | 
											
												
													
														|  |      res.push_back(arr);
 |  |      res.push_back(arr);
 | 
											
												
													
														|  |      return;
 |  |      return;
 | 
											
												
													
														|  |    }
 |  |    }
 | 
											
												
													
														|  |    for (size_t i = pos; i <= len; ++i) {
 |  |    for (size_t i = pos; i <= len; ++i) {
 | 
											
												
													
														|  | -    if (isswap(arr, pos, i) == true) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +    if (isdiff(arr, pos, i) == true) {
 | 
											
												
													
														|  |        swap(arr[pos], arr[i]);
 |  |        swap(arr[pos], arr[i]);
 | 
											
												
													
														|  | -      permutation(arr. pos + 1, len, res);
 |  | 
 | 
											
												
													
														|  | 
 |  | +      perm_r(arr, pos + 1, len, res);
 | 
											
												
													
														|  |        swap(arr[pos], arr[i]);
 |  |        swap(arr[pos], arr[i]);
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |    }
 |  |    }
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +// 简化入口
 | 
											
												
													
														|  | 
 |  | +void permutation(vector<int> &arr, vector<vector<int>> &res) {
 | 
											
												
													
														|  | 
 |  | +  perm_r(arr, 0, arr.size() - 1, res);
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +// 打印vector<int>
 | 
											
												
													
														|  | 
 |  | +ostream &print_arr(const vector<int> &vec, ostream &os) {
 | 
											
												
													
														|  | 
 |  | +  os << "[";
 | 
											
												
													
														|  | 
 |  | +  for (const int &n : vec)
 | 
											
												
													
														|  | 
 |  | +    os << " " << n;
 | 
											
												
													
														|  | 
 |  | +  os << " ]";
 | 
											
												
													
														|  | 
 |  | +  return os;
 | 
											
												
													
														|  | 
 |  | +};
 |