我正在嘗試一個示例程序來掌握prev和next排列之間的區別。但是,我的程序似乎不能正常工作。我通過詢問陣列中元件的數量啓動該程序並我建立與一個簡單的陣列,用於循環Prev_permutation vs Next_permutation難度
for(i = 0; i < x; i++)
ptr[i] = i;
cout << "Possible permuations using prev_permutation: " << endl;
do{
for(i = 0; i < x; i++)
cout << ptr[i] << " ";
cout << endl;
} while(prev_permutation(ptr, ptr+x));
cout << "Possible permuations using next_permutation: " << endl;
do{
for(i = 0; i < x; i++)
cout << ptr[i] << " ";
cout << endl;
} while(next_permutation(ptr, ptr+x));
當運行具有3種元素的樣品的代碼,(0,1,2)。 prev_permutation給我(0,1,2和多數民衆贊成它)。然後next_permutation給我(2,1,0)。但是,當我評論prev_permutation部分的代碼時,只有在next_permutation正在運行時,我才能得到6個不同的集合排列(0,1,2)。我似乎無法理解發生了什麼。
我有一個簡單的問題。當你說,名單按照字典順序排列,這是否意味着價值?例如,我用輸入(1 1 1 0 0)運行了另一個prev_permutation示例。在我運行這個之後,我得到了所有可能的排列,但我不明白prev和next會如何確定下一個排列是什麼。謝謝。 – Josh
字典順序意味着要決定一個順序是在一個順序之前還是之後,首先比較第一個元素,如果它不同,那麼第一個元素決定順序......如果它們相等,那麼你移動到第二個元素,等等。在三個1和兩個零的置換中,置換'(1 1 1 0 0)'是字典順序中的最後一個,所以你可以從那裏使用'prev_permutations'循環所有的排列。第一個是'(0 0 1 1 1)',你可以使用'next_permutation'從它開始循環所有的排列。 – 6502
感謝您的澄清!是否有可能通過next_permutation運行一組(0 0 0 1 1),然後獲得FINAL結果並運行prev_permutation以獲取0 0 0 1 1?所以,如果我將值存儲在一個數組中,這個函數是否會改變數組的值。 – Josh