偶然在图书馆看到这么个算法名称,很有中国特色。才知道幻方的填法这么多,也蛮有意思的。用它填写奇数幻方真的很有一套,我花了一个小时,用matlab在程序上实现了这个算法,真的还蛮有意思的!
程序如下:
%九宫飞星
%求解N(为奇数)次幻方
clear;
N=3;
A=zeros(N,N);
A(N,(N+1)/2)=1;
for i=2:N^2
j=i-1;
[x,y]=find(A==j);%如果这里是写成find(A,j)会报错;
%[x,y]=find(A,j);这句话的意思是返回在j之前所有非零数的横纵坐标
x=x-2;
y=y+1;
if x<=0
x=x+N;
end
if y==N+1 %y最多只能等于N+1
y=1;
end
if A(x,y)==0
A(x,y)=i;
else
[x,y]=find(A==j);
A(x-1,y)=i;
end
end
A