qibbxxt 发表于 2010-8-8 17:12:11

[原创]一个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

bainhome 发表于 2010-8-9 08:15:04

q是学数学的吗?发现你写的程序思路比较特别,有点儿偏算法的意思。

qibbxxt 发表于 2010-8-9 19:50:51

2# bainhome
恩,我本科是学数学的

chenyy2010 发表于 2010-8-9 20:42:45

呵呵,不错,赞一个!
页: [1]
查看完整版本: [原创]一个16世纪早期难题的程序演示