回 帖 发 新 帖 刷新版面

主题:[原创]汉诺塔

大家都知道汉诺塔吧...(我就不介绍了)游戏是有3柱的,其中有一个空闲柱帮助搬运.
大家都知道应该用递归来做吧(我就不讲了)
现在问题是:4柱汉诺塔如何做?(就是:有4个柱子,其中有两个空闲柱,如何移动使其全部移动到另一柱上?(其他规则与原汉诺塔同))


program fourhanoi;
var m:integer;
procedure movetower(n,A,D,C,B:integer);
  procedure moveDisc(fromDisc,toDisc:integer);
  begin
    write(fromDisc,'->',toDisc,' ');
  end;
begin
  if n>0 then
  begin
    movetower(n-2,A,B,D,C);
    moveDisc(A,C);
    moveDisc(A,D);
    moveDisc(C,D);
    movetower(n-2,B,D,C,A);
  end;
end;
begin
  readln(m);
  movetower(m,1,4,3,2);
end.

回复列表 (共21个回复)

21 楼

program fourhanoi;
var m:integer;
procedure movetower(n,A,D,C,B:integer);
  procedure moveDisc(fromDisc,toDisc:integer);
  begin
    write(fromDisc,'->',toDisc,' ');
  end;
begin
  if n>0 then
  begin
    movetower(n-2,A,B,D,C);
    moveDisc(A,C);
    moveDisc(A,D);
    moveDisc(C,D);
    movetower(n-2,B,D,C,A);
  end;
end;
begin
  readln(m);
  movetower(m,1,4,3,2);
end.

我来回复

您尚未登录,请登录后再回复。点此登录或注册