码迷,mamicode.com
首页 > 编程语言 > 详细

去重全排列的非递归方法,,按从小到大排序

时间:2016-04-27 22:31:57      阅读:430      评论:0      收藏:0      [点我收藏+]

标签:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string.h>
using namespace std;
#include<assert.h>

//反转区间
void Reverse(char* pBegin , char* pEnd)
{
while(pBegin < pEnd)
swap(*pBegin++ , *pEnd--);
}
//下一个排列
bool Next_permutation(char a[])
{
assert(a);
char *p , *q , *pFind;
char *pEnd = a + strlen(a) - 1;
if(a == pEnd)
return false;
p = pEnd;
while(p != a)
{
q = p;
p--;
if(*p < *q) //找降序的相邻2数,前一个数即替换数
{
//从后向前找比替换点大的第一个数
pFind = pEnd;
while(*pFind <= *p)
--pFind;
swap(*p , *pFind);
//替换点后的数全部反转
Reverse(q , pEnd);
return true;
}
}
Reverse(a , pEnd); //如果没有下一个排列,全部反转后返回false
return false;
}

int cmp(const void *a,const void *b)
{
return int(*(char *)a - *(char *)b);
}
int main(void)
{ char str[100];
while(cin>>str)
{
int k=strlen(str);
int num = 1;
sort(str ,str+k);
do
{
printf("%s\n",str);
}while(Next_permutation(str));
}
return 0;
}

去重全排列的非递归方法,,按从小到大排序

标签:

原文地址:http://www.cnblogs.com/ddddacmer/p/5440435.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!