使用next_permutation()的坑,你中招了么?
目錄
- 問題描述
- 解決
- 猜想
- 總結
今天在做一道題,結果答案始終不對,思路雖然有點笨吧,但是方法一定是沒有問題的。
經過一系列的排除,發現是next_permutation()函數的問題。
問題描述
http://oj.ecustacm.cn/problem.php?id=1301
做這道題的時候,一看不就是一個全排列么?。
用next_permutation()函數就完了
正確的答案應該是 576 24
但是運行的結果卻不盡人意,我很好奇為啥?
解決
經過我一系列的排除,我覺的數組的數據初始排列應該有問題。
經過我的一修改。奇妙的好了。
雖然結果正確了,但是我不禁陷入了沉思。
為啥啊?
我又翻書看一下對于next_permutation()的描述。頓時大悟。
原來next_permutation()是按字典序依次排列的,當排列到最大的值是就會返回false.
之前的我用習慣了,忘了最初的概念,當時也沒深究,反正用它就是算全排列的,于是造成了做題種出現了錯誤。
猜想
既然又對next_permutation()函數加深了了解。
那么我們就來實踐一下。
猜想:
根據定義next_permutation()函數是按字典序依次排列的,排列到最大停止。
那么如果剛開始的數據的字典序就是最大的,那么應該就只會運行一次,即初始的值。
由上圖可以看到我們的猜想是正確的。
總結
next_permutation()函數是按字典序排列的函數。它與初始的數組的值是息息相關的。
不要以為隨便一個數組,用next_permutation()函數就可以得到全排列。
要時刻的記住里面的特性。
為了保險起見。在使用前可以先排序數組。再用next_permutation()。
下面是另一位博主寫的關于next_permutation的另一個大坑,寫的很不錯。
我這里就不造輪子了。
C++中全排列函數next_permutation的一個大坑
總結
以上是生活随笔為你收集整理的使用next_permutation()的坑,你中招了么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用vector写结构体
- 下一篇: 其他高效技巧与算法