- 积分
- 46
- 注册时间
- 2007-4-28
- 仿真币
-
- 最后登录
- 1970-1-1
|
一个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=[a b;a b+1];
- y=[b a;b+1 a];
- plot(x+y*1i);
- axis([-0.1 1.1 -0.1 1.1]);
- [xor,yor]=meshgrid(mean([a(1:end-1);a(2:end)]));
- seq=[7 4 1 8 5 2 9 6 3];
- coor=sortrows([seq',xor(:),yor(:)],1);
- rhorse=[1 3];
- ghorse=[7 9];
- 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=[1 6 7 2 9 4 3 8];
- 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
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
评分
-
1
查看全部评分
-
|