開啟章節選單
排列枚舉
罕見簡介
排列枚舉也是一種常見的枚舉技巧,主要用途就是枚舉一個陣列的所有可能的排列方式。在這個技巧中,我們會使用 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
差不多,不過比較少用到。