例:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
javascript代码:
分成不同的正方形进行判断,例如上例是分成外环正方形和内环正方形
传入值n代表n*n矩阵
function snake(n) {
let m = Math.floor(n / 2);
let start = 0;
let arr = [];
for (let i = 0; i < n; i++) {
arr[i] = [];
for (let j = 0; j < n; j++) {
arr[j] = [];
}
}
arr[start][start] = 1;
while (n >= start * 2) {
arr = circleArr(arr, n, start);
start++;
}
console.log(JSON.stringify(arr));
}
function circleArr(arr, n, start) {
let endX = n - 1 - start;
let endY = n - 1 - start;
// 从左到右
var leftTop = arr[start][start];
if (start >= 1) {
var leftTop = arr[start][start - 1] + 1;
}
for (let i = start, num = leftTop; i <= endX; i++) {
arr[start][i] = num;
num++;
}
// 从上到下
let rightTop = arr[start][endY] + 1;
if (start < endY) {
for (let i = start + 1, num = rightTop; i <= endY; ++i, num++) {
arr[i][endY] = num;
}
}
// 从右到左
let rightBottom = arr[endX][endY] + 1;
if (start < endX && start < endY) {
for (let i = endX - 1, num = rightBottom; i >= start; --i, num++) {
arr[endX][i] = num;
}
}
// 从下到上
let leftBottom = arr[endX][start] + 1;
if (start < endX && start < endY - 1) {
for (let i = endY - 1, num = leftBottom; i >= start + 1; --i, num++) {
arr[i][start] = num;
}
}
return arr;
}
//函数调用,此时传入n=5,其它类似
snake(5);
运行结果
[
[1,2,3,4,5],
[16,17,18,19,6],
[15,24,25,20,7],
[14,23,22,21,8],
[13,12,11,10,9]
]