ZigZag 是用在图像压缩中的一个算法,对于任意二维数组 ar[x_max][y_max] 按照下面的顺序遍历

?

直接放代码,思路就是凑一个最大范围的三角形,代码可以更精简。

/*ZigZag遍历任意二维数组
*/
global ar:=object()
a=5 ;行
b=7 ;列
c :=a+b-1 ;对角线数量
d:=a>b ? a : b
make_array(a,b)

loop, % c
	{		
	sn2:=a_index
	loop, % sn2
		{
			if (mod(sn2,2)=0) 
			{
				tmp.=ar[a_index, sn2+1-a_index] ? ar[a_index, sn2+1-a_index]  . "|" : ""
			}
			else
			{
				tmp.=ar[sn2+1-a_index, a_index] ? ar[sn2+1-a_index, a_index] . "|" : ""
			}
		}
	}
msgbox, % tmp
return

/*生成一个二维数组
*/
make_array(x,y)
{
loop, % x
{
	aa:=A_Index
	loop, % y
		{
		ar[aa,A_index]:=a_index+(aa-1)*y	
		}
}
return, % ar
}