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