这是前几天实现的一段JS输出螺旋线的算法。特此记录 ~~

演示

function printSpiral(s , d , st) { var rect = new Array(s * s).fill(0); var r = [ [ 1, 0, 1], [ 0, 1, 2], [-1, 0, 3], [ 0, -1, 0] ]; var stack = [] var px = function(x, y) { return (x < 0 || y < 0 || x > s - 1 || y > s - 1) ? 0 : rect[x + y * s]; }; var hit = function(x, y) { return px(x + 1, y) + px(x - 1, y) + px(x, y + 1) + px(x, y - 1) <= 1; }; var next = function(x, y, z, w) { if (z != w) { rect[y * s + x] = 1; stack.push([x,y]); var m = r[z]; ( (z == 0 && x == s - 1) || (z == 1 && y == s - 1) || (z == 2 && x == 0) || (z == 3 && y == 0) || !hit(x + m[0], y + m[1]) ) ? next(x, y, m[2], w == -1 ? z : w): next(x + m[0], y + m[1], z, -1); } }; next(0, 0, d ? 1 : 0, -1); return st ? stack : ret;}