permutations

来源:互联网 发布:mysql数据库5.5.20安装 编辑:程序博客网 时间:2024/05/22 01:27
/*暴力枚举permutations 排列[1,2,3]permutations:[1,2,3] [1,3,2][2,1,3] [2,3,1][3,1,2] [3,2,1]分析:使用深度搜索:从左到右遍历,变量i看是否在已选路径中如果在,push_back(),继续若果不再,返回上一层*/#include <iostream>#include<vector>#include<algorithm>using namespace std;class Solution{public:vector<vector<int>>permulation(vector<int>&S){vector<vector<int>>result;vector<int>path;DFS(S, path, result);return result;}private:void DFS(vector<int>&s, vector<int>&path, vector<vector<int>>&result){if (path.size() == s.size())//终止条件{result.push_back(path);return;}for (auto i : s){auto position = find(path.begin(), path.end(), i);//寻找i是否在pathif (position == path.end())//i不在path中{path.push_back(i);DFS(s, path, result);path.pop_back();//返回上一层}}}};int main(){Solution s1;int n;vector<vector<int>>result;vector<int>vec;cout << "请输入n:";cin >> n;for (int i = 0; i < n; i++)vec.push_back(i + 1);cout << "permutations are:" << endl;result = s1.permulation(vec);for (int i = 0; i < result.size(); i++){for (int j = 0; j < result[i].size(); j++){cout << result[i][j] << ",";}cout << endl;}system("pause");return 0;}

0 0
原创粉丝点击