function a = spiral(n) a = ones(n*n, 1); u = -(i = n) * (v = ones(n, 1)); for k = n-1:-1:1 j = 1:k; a(j+i) = u(j) = -u(j); a(j+(i+k)) = v(j) = -v(j); i += 2*k; endfor a(cumsum(a)) = 1:n*n; a = reshape(a, n, n)'-1; endfunction >> spiral(5) ans = 0 1 2 3 4 15 16 17 18 5 14 23 24 19 6 13 22 21 20 7 12 11 10 9 8