最近看了有个螺旋队列的问题,感觉有实现的必要,代码如下:
inline int max(int x,int y){
return x>y?x:y;
}
int foo(int x,int y){
int t=max(abs(x),abs(y));
int c=t;
c<<=1;
c-=1;
c*=c;
if(y==t){
return c+3*t-x;
}else if(x==-t){
return c+5*t-y;
}else if(y==-t){
return c+7*t+x;
}else{
return c+t+y;
}
}
void main(){
const int N=6;
for(int i=-N;i<=N;i++){
for(int j=-N;j<=N;j++)
printf("%4d",foo(j,i));
printf("\n");
}
}
程序打印出螺旋队列,有待完善。
下面是这种螺旋队列的一种变形:
inline int max(int x,int y){
return x>y?x:y;
}
int other(int x,int y,int n){
n=n*2+1;
n*=n;
int t=max(abs(x),abs(y));
int c=t;
c<<=1;
c-=1;
c*=c;
if(y==-t){
return n+1-(c+3*t+x);
}else if(x==t){
return n+1-(c+5*t+y);
}else if(y==t){
return n+1-(c+7*t-x);
}else{
return n+1-(c+t-y);
}
}
void main(){
const int N=4;
for(int i=N;i>=-N;i--){
for(int j=-N;j<=N;j++)
printf("%3d",other(j,i,N));
printf("\n");
}
}