bool my_next_permutation(int *pData, int nSize)
{
int *pLast = pData + nSize - 1;
int *pCurr = pLast;
for(;;)
{
if (pCurr == pData)
return false;
int *pPrev = pCurr-1;
if (*pPrev < *pCurr)
{
int *pTemp = pLast;
for(;;)
{
if (pTemp == pData)
return false;
if (*pTemp > *pPrev)
break;
pTemp--;
}
std::swap(*pPrev, *pTemp);
std::reverse(pCurr, pLast+1);
return true;
}
pCurr--;
}
}
TEST:
do
{
copy(a, a + size, ostream_iterator<int>(cout, ","));
cout << endl;
} while(my_next_permutation(a, size));
my_next_permutation in c++
最新推荐文章于 2024-07-09 22:37:42 发布