鱼C论坛

 找回密码
 立即注册
查看: 2691|回复: 1

Delphi之汉诺塔算法求解

[复制链接]
发表于 2014-9-22 11:15:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 bluesky5210 于 2014-9-27 16:33 编辑

这是源代码:输入30个圆盘数量就卡在那了,有没有更高效的代码??还有如何测试一个程序执行的效率,就是想知道比如这个汉诺塔算法计算30个圆盘所需要的时间。?
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
procedure MoveHNTDisk(N:Integer;A,B,C:Char);
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.MoveHNTDisk(N:Integer;A,B,C:Char);
begin
  if N=1 then
  begin
    ListBox1.Items.Add(A +'--->' + C);
  end
  else
  begin
    MoveHNTDisk(N-1,A,C,B);
    ListBox1.Items.Add(A + '--->' + C);
    MoveHNTDisk(N-1,B,A,C);
  end;
end;  
procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Clear;
  if StrToInt(Edit1.Text) > 0 then
  begin
    MoveHNTDisk(StrToInt(Edit1.Text),'A','B','C');
    Label3.Caption:='所需次数为:'#10#13 + IntToStr(ListBox1.Items.Count) + '次';
  end
  else
  ShowMessage('请输入大于0的整数!');
end;
end.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-22 09:04:04 | 显示全部楼层

回帖奖励 +20 鱼币

看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 08:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表