import static java.lang.Math.abs;//靜態引入
import static java.lang.Math.max;
public class SpiralQueue {
/**
* JAVA版螺旋隊列
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SpiralQueue queue=new SpiralQueue();
int x,y;
int N=3;//打印的層數
for (y = -N; y <=N; y++) {
for (x=-N; x <=N; x++) {
System.out.print(queue.Spiral_Queue(x,y)+"\t");
}
System.out.println();
}
System.out.println(queue.Spiral_Queue(2, 2));
}
// 輸入座標,輸出相應的數字
public int Spiral_Queue(int x, int y) {
int val = 0;// 該座標對應的數值
int t = max(abs(x), abs(y));// 該座標對應的層數
if (y == -t) // 北邊(北邊的判斷分支要先於東邊,這是爲了東北角最大值考慮的)
val = square(2*t-1)+7*t+x;
else if (y == t) // 南邊
val = square(2*t-1)+3*t-x;
else if (x == -t) // 西邊
val = square(2 * t - 1) + 5 * t - y;
else if (x == t) // 東邊
val = square(2 * t - 1) + t + y;
return val;
}
private int square(int i) {
// TODO Auto-generated method stub
return i * i;
}
}