簡介#
排列枚舉也是一種常見的枚舉技巧,主要用途就是枚舉一個陣列的所有可能的排列方式。在這個技巧中,我們會使用 C++ 的 next_permutation 函式,這個函式可以幫助我們找到下一個排列。
實作方式#
在 C++ 中,我們可以使用 next_permutation 函式來找到下一個排列。
sort(v.begin(), v.end());
// 枚舉 v 的所有排列
do {
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
cout << endl;
} while (next_permutation(v.begin(), v.end()));
注意
這邊實作上,有幾個比較需要注意的點:
- 由於
next_permutation是幫我們找到字典序更大的下一個排序,因此我們需要先將陣列升序排序好,next_permutation函式才能正確運作。 - 這個函式會將目前的排列變成下一個排列,如果已經是最後一個排列,則會回傳
false。
補充
除了 next_permutation 之外,C++ 還有一個函式叫做 prev_permutation,可以用來找到上一個排列,使用方式和 next_permutation 差不多,不過比較少用到。
