求高手解释一下算法,关于非递归全排列,小弟没参透!!!!!
算法如下:
#include
#define N 5 //定义常量
int a[N+1];
void exchange(int& x); //函数声明
void swap(int& a, int& b); //同上
void main()
{
int i;
int y=1;
int x;
for (i=1;i<=N;i++)
a=i;
do
{
cout< ";
for (i=1;i<=N;i++)
cout<;
cout< x=0;
y++;
exchange(x);
}while (x!=0);
return 0;
}
void exchange(int& x) //取x的地址作为参数
{
int i;
int j;
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]);
for (i=x+1;i<=N;i++)
{
if (i!=N+x+1-i)
swap(a[i],a[N+x+1-i]);
if ((i+1)*2>N+x+1)
break;
}
}
}
void swap (int& a, int& b) //a.b值互换
{
a=a+b;
b=a-b;
a=a-b;
}
就是对整体的算法思想不明白,语句倒是能看懂 ,谢谢
问题点数:10、回复次数:2Top
1 楼djfu(飞龙在天)回复于 2006-05-02 17:18:47 得分 0
你没有贴全啊,有些代码都看不到。Top
2 楼djfu(飞龙在天)回复于 2006-05-02 17:19:53 得分 0
你这个程序编译都通不过。Top




