免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 922 | 回复: 0
打印 上一主题 下一主题

输出比给定排列更大的所有排列(相当于STL算法 net_permutation的实现) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-12 20:14 |只看该作者 |倒序浏览

例如排列112253321的下一个稍大的排列是112312235。
也就是说,任给一个排列,我可以找到一个比它稍大的排列,因此只要给我最小的那个排列(对本例来说即111222335),则我可以依次找出所有排列。
(注:由112253321计算出112312235的算法是:
先从右往左找,后五个数一直都上升,直到2处首次下降。
将2与后面比其稍大的数3互换得到112353221
然后将后五个数倒序即得到112312235.)




/*输出给排列及更大的所有排列*/
#include
#define N 5
print(int a[])//打印排列
{   
for(int z=0;z=0;i--)//从后往前走
{
  if(a右一直升
{
  return false;//返回false说明没有下一个了
}
int remberi=i;//把i值记录下来
for(j=N-1;j>=remberi+1;j--)//在N-1至remberi+1段上从左往右走
{
  if(a[j]>a[remberi])
   break;
}//找到第一个大于a[remberi]的数a[j]
//交换a[j]与a[remberi]
int temp=a[remberi];
a[remberi]=a[j];
a[j]=temp;
remberi++;//remberi前是一步
//将前当remberi至N-1段反序
for(k=1;k
main()
{
int a[N];
cout>a[z];
print(a);
int count=1;
while(nextlin(a)!=false)
{
  print(a);
  count++;
}
cout
}

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/104733/showart_2119450.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP