All pastes #13279 Raw Edit

Mine

public text v1 · immutable
#13279 ·published 2005-06-03 15:50 UTC
rendered paste body
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, ComCtrls;

type
  TfmMain = class(TForm)
    Grid: TStringGrid;
    PathList: TListView;
    GoButt: TButton;
    edNumNodes: TEdit;
    Label1: TLabel;
    Complete: TButton;
    Clear: TButton;
    Check: TButton;
    procedure GoButtClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    procedure CalcCost(Current : string; Next : char; Rest : string;
      Cost : Integer);
    procedure CheckBest(Path : string; Cost : integer);
    procedure AddPath(Path : string; Cost : integer);
  public
    { Public declarations }
  end;

var
  fmMain: TfmMain;

implementation

{$R *.dfm}

var
  best : integer;

procedure TfmMain.GoButtClick(Sender: TObject);
var
  Range : string;
  i : integer;
begin
  Best := 0;
  Range := '';
  for i := 2 to StrToInt(edNumNodes.text) do
    Range := Range + IntToStr(i);
  CalcCost('','1',range,0);
end;



procedure TfmMain.CalcCost(Current: string; Next: char; Rest: string;
  Cost: Integer);
var
  TmpRest : string;
  i, len : integer;
  TmpNext, Last : char;
begin
  Len := Length(Current);
  If len <> 0 then begin
    Last := Current[len];
    Cost := Cost + StrToInt(Grid.Cells[StrToInt(Last),StrToInt(Next)]);
  end;
  Current := Current + Next;
  If Length(rest) < 1 then begin
    CheckBest(Current,Cost);
    exit;
  end;
  for i := 1 to Length(rest) do begin
    TmpNext := Rest[i];
    TmpRest := Rest;
    Delete(TmpRest,i,1);
    CalcCost(Current, TmpNext, TmpRest, Cost);
  end;
end;

procedure TfmMain.FormCreate(Sender: TObject);
var
  i : integer;
begin
  best := 0;
  for i := 1 to 7 do begin
    Grid.Cells[i,0] := IntToStr(i);
    Grid.Cells[0,i] := IntToStr(i);
    Grid.Cells[i,i] := '-';
  end;
end;

procedure TfmMain.CheckBest(Path: string; Cost: integer);
var
  First, Last : char;
begin
  First := Path[1];
  Last := Path[Length(Path)];
  Cost := Cost + StrToInt(Grid.Cells[StrToInt(first),StrToInt(last)]);

  if Best = 0 then begin
    PathList.Clear;
    AddPath(Path, Cost);
  end
  else if Cost < Best then begin
    PathList.Clear;
    AddPath(Path, Cost);
  end
  else if Cost = Best then begin
    AddPath(Path, Cost);
  end;


end;

procedure TfmMain.AddPath(Path: string; Cost: integer);
var
  Item : TListItem;
begin
  Best := cost;
  Item := PathList.Items.Add;
  Item.Caption := Path;
  Item.SubItems.Add(IntToStr(cost));
end;

end.