1248 -- 【回溯練習(xí)】無重復(fù)元素的全排列
2023-05-28 18:41 作者:李臺(tái)賈高速 | 我要投稿

#include <iostream> #include <vector> #include <algorithm> ? void generatePermutations(std::vector<char>& letters, std::vector<bool>& used, std::vector<char>& permutation, int n) { if (permutation.size() == n) { // 輸出當(dāng)前的排列 static int count = 1; std::cout << count++ << ":"; for (char letter : permutation) { std::cout << letter; } std::cout << std::endl; return; } ? for (int i = 0; i < n; ++i) { if (!used[i]) { used[i] = true; permutation.push_back(letters[i]); ? generatePermutations(letters, used, permutation, n); ? used[i] = false; permutation.pop_back(); } } } ? void generateUniquePermutations(const std::string& str) { int n = str.length(); std::vector<char> letters(str.begin(), str.end()); std::sort(letters.begin(), letters.end()); // 按照字典順序排序 std::vector<bool> used(n, false); std::vector<char> permutation; ? generatePermutations(letters, used, permutation, n); } ? int main() { std::string str; std::cin >> str; ? generateUniquePermutations(str); ? return 0; }
#include <iostream> #include <vector> #include <algorithm> ? void generatePermutations(std::vector<char>& letters, std::vector<bool>& used, std::vector<char>& permutation, int n) { if (permutation.size() == n) { // 輸出當(dāng)前的排列 static int count = 1; std::cout << count++ << ":"; for (char letter : permutation) { std::cout << letter; } std::cout << std::endl; return; } ? for (int i = 0; i < n; ++i) { if (!used[i]) { used[i] = true; permutation.push_back(letters[i]); ? generatePermutations(letters, used, permutation, n); ? used[i] = false; permutation.pop_back(); } } } ? void generateUniquePermutations(const std::string& str) { int n = str.length(); std::vector<char> letters(str.begin(), str.end()); std::sort(letters.begin(), letters.end()); // 按照字典順序排序 std::vector<bool> used(n, false); std::vector<char> permutation; ? generatePermutations(letters, used, permutation, n); } ? int main() { std::string str; std::cin >> str; ? generateUniquePermutations(str); ? return 0; }
標(biāo)簽: