求高手解释一下算法,关于非递归全排列,小弟没参透!!!!!
#include<stdio.h>
void main()
{
int i,j,k,x,temp,n,a[10]={0};
scanf("%d",&n);
for(i=1;i<=n;i++)
{
a[i]=i;
}
/*for(i=1;i<=n;i++)
{
printf("%d",a[i]);
}*/
do{
for(i=1;i<=n;i++)
{
printf("%d",a[i]);
}
printf("\n");
x=0;
for(i=1;i<=n-1;i++)
{
if(a[i]<=a[i+1])/////找到最后的顺序
x=i;
}
if(x!=0)
{
for(i=x;i<=n;i++)
{
if(a[x]<=a[i])
j=i;
}
//swap(a[x],a[j]);
temp=a[x];
a[x]=a[j];
a[j]=temp;
for(i=x+1;i<=n;i++)
{
if(i!=n+x+1-i)
{
temp=a[i];
a[i]=a[n+x+1-i];
a[n+x+1-i]=temp;
}
//swap(a[i],a[n+x+1-i]);
if((i+1)*2>n+x+1)
break;
}
}
}while(x!=0);
}
编译能通过,我试了
语句能看懂,就是算法不明白
问题点数:10、回复次数:3Top
1 楼aboy85()回复于 2006-05-03 13:54:15 得分 0
我先顶一下就是这里不太明白
for(i=x+1;i<=n;i++)
{
if(i!=n+x+1-i)
{
temp=a[i];
a[i]=a[n+x+1-i];
a[n+x+1-i]=temp;
}
//swap(a[i],a[n+x+1-i]);
if((i+1)*2>n+x+1)
break;
}
a[n+x+1-i]咋想的呢?
Top
2 楼sz20006km()回复于 2006-05-03 16:21:35 得分 0
这就是交换 把两个数组存储的内容进行交换Top
3 楼sz20006km()回复于 2006-05-03 16:24:33 得分 0
跟上帖 你自己写个
int a = 10 ,b = 20, temp = 0;
temp = a;
a= b;
b = temp;
看下就好了
Top




