%Zigzag scanning
n = 8;
a = zeros(n);
% 初始化
a(1,1) = 1;
i = 1; %行
j = 1; %列
f = 0; %标志位 1表示行增加列减小
k = 2;
% 循环赋值 从左上角开始循环
while(k < n^2+1)
if(j == n) % 已到右边界 向下移动1 行增加 f=1
i = i+1; f=1; a(i,j) = k; k=k+1;
i = i+1; j = j-1;
elseif(i == n) % 已到下边界 向右移动1 列增加 f=0
j = j+1; f=0; a(i,j) = k; k=k+1;
i = i-1; j = j+1;
elseif(i == 1) % 已到上边界 向右移动1 行增加 f=0
j = j+1; f=1; a(i,j) = k; k=k+1;
i = i+1; j = j-1;
elseif(j == 1) % 已到左边界 向下移动1 列增加 f=1
i = i+1; f=0; a(i,j) = k; k=k+1;
i = i-1; j = j+1;
elseif(f == 1) %行增加 列减小
i = i+1; j = j-1;
else %行减小 列增加
i = i-1; j = j+1;
end
% 赋值
if(k > n^2)
break;
end
a(i,j) = k;
k=k+1;
end
disp(a);
看不懂自己以前用c++写的了: https://download.csdn.net/download/qq_38204686/9926679