C++ next_permutation如何避免重復(fù)結(jié)果

c++
小樊
96
2024-07-13 04:26:27
欄目: 編程語言

在使用C++中的next_permutation函數(shù)生成排列時(shí),可以通過在循環(huán)中添加判斷條件來避免重復(fù)結(jié)果??梢詫⑸傻呐帕写鎯?chǔ)在一個(gè)集合中,每次生成一個(gè)新的排列時(shí),先判斷該排列是否已經(jīng)存在于集合中,如果已經(jīng)存在,則繼續(xù)生成下一個(gè)排列,直到生成一個(gè)不重復(fù)的排列為止。

以下是一個(gè)示例代碼:

#include <iostream>
#include <algorithm>
#include <vector>
#include <set>

int main() {
    std::vector<int> nums = {1, 2, 2, 3};
    std::sort(nums.begin(), nums.end());
    
    std::set<std::vector<int>> result_set;
    
    do {
        if (result_set.find(nums) == result_set.end()) {
            result_set.insert(nums);
            
            for (int num : nums) {
                std::cout << num << " ";
            }
            std::cout << std::endl;
        }
    } while (std::next_permutation(nums.begin(), nums.end()));
    
    return 0;
}

在上面的示例中,我們首先將輸入數(shù)組nums排序,然后使用next_permutation函數(shù)生成排列,并將每個(gè)排列存儲(chǔ)在result_set中。在每次生成一個(gè)新的排列時(shí),我們先判斷該排列是否已經(jīng)存在于result_set中,如果不存在,則輸出該排列并將其插入到result_set中。這樣就可以避免生成重復(fù)的排列結(jié)果。

0