function circleNumber(n){
var re = [];
/**
1表示右
2表示下
3表示左
4表示上
*/
var currentPos = 1;
/**定义初始1的xy坐标*/
var xy = null;
var max = n * n;
/**
生成空数组
*/
function initMap(){
for(var i= 0 ; i < n ; i++){
var tmp = [];
for(var j = 0 ; j < n ; j++ ){
tmp.push(0);
}
re.push(tmp);
}
}
/**
找到1的位置
*/
function firstPos(){
if(n%2 == 1){ // 如果是奇数,1就在正中心位置
var posx = parseInt(n/2),
posy = parseInt(n/2);
re[posx][posy] = 1;
xy = {x:posx,y:posy};
}else{
var posx = parseInt((n-1)/2),
posy = parseInt((n-1)/2);
re[posx][posy] = 1;
xy = {x:posx,y:posy};
}
}
/**
按顺序依次填充所有的数字位置
*/
function step(){
var n = 2;
while(n <= max){
switch(currentPos){
case 1://
if(re[xy.x][xy.y+1] == 0){
re[xy.x][xy.y+1] = n;
n++;
xy = {x:xy.x,y:xy.y+1};
currentPos++;
}else{
if(currentPos == 1){
currentPos = 4;
}else{
currentPos--;
}
}
break;
case 2://
if(re[xy.x+1][xy.y] == 0){
re[xy.x+1][xy.y] = n;
xy = {x:xy.x+1,y:xy.y};
currentPos++;
n++;
}else{
if(currentPos == 1){
currentPos = 4;
}else{
currentPos--;
}
}
break;
case 3://
if(re[xy.x][xy.y-1] == 0){
re[xy.x][xy.y-1] = n;
xy = {x:xy.x,y:xy.y-1};
currentPos++;
n++;
}else{
if(currentPos == 1){
currentPos = 4;
}else{
currentPos--;
}
}
break;
case 4://
if(re[xy.x-1][xy.y] == 0){
re[xy.x-1][xy.y] =n;
xy = {x:xy.x-1,y:xy.y};
currentPos = 1;
n++;
}else{
if(currentPos == 1){
currentPos = 4;
}else{
currentPos--;
}
}
break;
default:
break;
}
}
console.log("end");
}
initMap();
firstPos();
step();
print();
/**
螺旋数组
*/
function print(){
var msg = "";
for(var i = 0 ; i < re.length ; i++){
for(var j = 0 ; j < re[i].length ; j++){
msg += " "+re[i][j];
}
msg += "\n";
}
alert(msg);
}
}
circleNumber(3);
将代码复制到console中运行即可