[原创]一个16世纪早期难题的程序演示
一个16世纪早期的难题,在一个3*3的棋盘上,两只黑骑士和两只红骑士放在四个角上,要求用最小的部数让黑红骑士交换位置,骑士的移动方法和国际象棋中的走法是一样的。当然这个问题已经解决,我只是用程序演示一个移动的过程,程序如下:
clear;clc;close all
figure('menubar','none','numbertitle','off','name','16世纪的一个难题');
N=4;
a=linspace(0,1,N);
b=zeros(1,length(a));
c=fliplr(a);
x=;
y=;
plot(x+y*1i);
axis([-0.1 1.1 -0.1 1.1]);
=meshgrid(mean());
seq=;
coor=sortrows(,1);
rhorse=;
ghorse=;
num=size(coor,1);
axis equal off
for i=1:9
if ismember(i,rhorse)
h(i)=text(coor(i,2),coor(i,3),'马','fontsize',38,'fontname','隶书',...
'HorizontalAlignment','center','BackgroundColor',[.7 .9 .7],'color','r');
elseif ismember(i,ghorse)
h(i)=text(coor(i,2),coor(i,3),'马','fontsize',38,'fontname','隶书',...
'HorizontalAlignment','center','BackgroundColor',[.7 .9 .7],'color','k');
else
h(i)=text(coor(i,2),coor(i,3),' ','fontsize',38,'fontname','隶书',...
'HorizontalAlignment','center','BackgroundColor',[.7 .9 .7],'color','g');
end
end
pp=title('N=0');t=1;
howg=;
howgtr=howg(hankel(1:numel(howg),0:numel(howg)-1));
matr=howgtr(1:5,1:2:end);pause(3);
for i=1:N
for j=1:N
set(h(matr(i+1,j)),'string','马','fontsize',38,'fontname','隶书',...
'HorizontalAlignment','center','BackgroundColor',[.7 .9 .7],'color',get(h(matr(i,j)),'color'));
set(h(matr(i,j)),'string',' ');
set(pp,'string',sprintf('n=%d',t));
t=t+1;
pause(1);
end
end
q是学数学的吗?发现你写的程序思路比较特别,有点儿偏算法的意思。 2# bainhome
恩,我本科是学数学的 呵呵,不错,赞一个!
页:
[1]