算法--螺旋队列代码实现

来源:互联网 发布:mac数据库软件 编辑:程序博客网 时间:2024/05/07 00:21

  最近看了有个螺旋队列的问题,感觉有实现的必要,代码如下:

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");}}


0 0
原创粉丝点击