text1.cpp

来自「有重复元素参加的重排列」· C++ 代码 · 共 47 行

CPP
47
字号
#include <cstdlib>
#include <iostream>
#include <iterator>
#include <algorithm>

using namespace std;

template<typename BidirectionalIterator>

bool    Next_permutation(  BidirectionalIterator first,
                           BidirectionalIterator last  ){
      if ( first == last)
         return false;
      BidirectionalIterator i = first;
      ++i;
      if (i == last)
              return false;
      i = last;
      --i;
      while( 1 ){
              BidirectionalIterator ii = i;
              --i;
              if (*i < *ii){
                 BidirectionalIterator j = last;
                 while (!(*i < *--j));
                 std::iter_swap(i, j);
                 std::reverse(ii, last);
                 return true;
              }
              if (i == first){
                 std::reverse(first, last);
                 return false;
              }
    }
}
   
int main(int argc, char *argv[])
{
    char s[]="aac";
    sort( s, s+sizeof(s)/sizeof(s[0])-1 );
    do{
         copy( s, s+sizeof(s)/sizeof(s[0])-1, ostream_iterator<char>(cout," ") );
         cout<<endl;
    }while( Next_permutation( s, s+sizeof(s)/sizeof(s[0])-1 ) );
    system("PAUSE");
    return EXIT_SUCCESS;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?