扭转排列算法

作者: 今晚买四不像计算  发布:2019-09-24
#include<iostream>

using namespace std;
int num[10];
bool dir[10];
__int64 Array[3628805];
int find()//找出排列数中活跃的项
{
int Max=-1;
int index=-1;
for(int i=0;i<10;i++)
{
if(dir[num[i]]==1)
{
if(i!=0)
{
if(num[i]>num[i-1])
{
if(num[i]>Max)
{
Max=num[i];
index=i;
}
}
}
}else
{
if(i!=9)
{
if(num[i]>num[i+1])
{
if(num[i]>Max)
{
Max=num[i];
index=i;
}
}
}
}
}
return index;
}
void changedir(int n)//改变排列数方向
{
for(int i=n+1;i<10;i++)
dir[i]=!dir[i];
}
void Print(int cnt)//转换成整型
{
Array[cnt]=0;
for(int i=0;i<10;i++)
Array[cnt]=Array[cnt]*10+num[i];
}
int main()
{
freopen("out.txt","w",stdout);
for(int i=0;i<10;i++)
{
dir[i]=1;
num[i]=i;
}
int cnt=1;
while(1)
{
Print(cnt-1);
int index=find();
if(index==-1)//最后一个排列已经生成则返回-1 退出
break;
int N=num[index];
if(dir[N]==1)
swap(num[index],num[index-1]);
else
swap(num[index],num[index+1]);
changedir(N);//反转排列数中大于N的数方向
cnt++;
}
printf("cnt = %dn",cnt);
for(int i=0;i<cnt;i++)
printf("%I64dn",Array[i]);
return 0;
}

本文由今晚买四不像发布于今晚买四不像计算,转载请注明出处:扭转排列算法

关键词:

上一篇:使用jQuery实现dropdownlist的联动效果
下一篇:没有了