C++ 全排列函數 nyoj 366

來源:互聯網
上載者:User

標籤:

C++ STL中提供了std::next_permutation與std::prev_permutation可以擷取數字或者是字元的全排列,其中std::next_permutation提供升序、std::prev_permutation提供降序。

1.std::next_permutation函數原型

  template <class BidirectionalIterator>

  bool next_permutation (BidirectionalIterator first, BidirectionalIterator last );

 

  template <class BidirectionalIterator, class Compare>

  bool next_permutation (BidirectionalIterator first,BidirectionalIterator last, Compare comp);

 

說明:next_permutation,重新排列範圍內的元素[第一,最後一個)返回按照字典序排列的下一個值較大的組合。

傳回值:如果有一個更高的排列,它重新排列元素,並返回true;如果這是不可能的(因為它已經在最大可能的排列),它按升序排列重新元素,並返回false。

 

2.演算法實現原理

見:http://hi.baidu.com/bellgrade/item/70b65b8a7ea3c9c398255fd4

演算法描述:

1、從尾部開始往前尋找兩個相鄰的元素

第1個元素i,第2個元素j(從前往後數的),且i<j

2、再從尾往前找第一個大於i的元素k。將i、k對調

3、[j,last)範圍的元素置逆(顛倒排列

 

例:

 

D的小L時間限制:4000 ms  |            記憶體限制:65535 KB 難度:2
描述
      一天TC的匡匡找ACM的小L玩三國殺,但是這會小L忙著哩,不想和匡匡玩但又怕匡匡生氣,這時小L給匡匡出了個題目想難倒匡匡(小L很D吧),有一個數n(0<n<10),寫出1到n的全排列,這時匡匡有點囧了,,,聰明的你能幫匡匡解圍嗎?
輸入
第一行輸入一個數N(0<N<10),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個整數x(0<x<10)
輸出
按特定順序輸出所有組合。 特定順序:每一個組合中的值從小到大排列,組合之間按字典序排列。
範例輸入
223
範例輸出
1221123132213231312321

 

 1 #include <cstdio> 2 #include <algorithm> 3   4 using namespace std; 5 int a[]={1,2,3,4,5,6,7,8,9}; 6 int main() 7 { 8     int t; 9     scanf("%d", &t);10     while(t--){11         int n;12         scanf("%d", &n);13         // for(int i = 0; i < n; i++){14         //     a[i] = i + 1;15         // }    16         do17         {18             for(int i = 0; i < n; i++){19                 printf("%d", a[i]);20             }21             printf("\n");22         }while (next_permutation(a, a + n));23     }24     25     return 0;26 }

字元:

 

 1 #include <iostream> 2 #include <algorithm> 3 #include <string> 4   5 using namespace std; 6   7 int main() 8 { 9     string str;10     cin >> str;11     sort(str.begin(), str.end());12     cout << str << endl;13     while (next_permutation(str.begin(), str.end()))14     {15         cout << str << endl;16     }17     return 0;18 }

 

C++ 全排列函數 nyoj 366

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.