Beispiel zur Implementierung



unit GraphUnit;

interface

uses
  MyMemObj, Windows, Graphics, SysUtils, Classes;

type
  TKante = record
             DestKnoten: IndexType;             //Zielknoten
             Value: Real;                                    //Wertigkeit der Kante
             Marke: Integer;
           end;
  PKante = ^TKante;

  TKantenArray = array[0..0] of TKante;    //Arrayelemente werden dynamisch alloziiert

  PKantenArray = ^TKantenArray;

  TKnoten = record
              Name: String;
              Marke: Integer;        //Zeiogt einen besuchten Knoten an
              KantenCount: Cardinal; //Anzahl der von dem Knoten abgehenden Kanten
              Kanten: PKantenArray;  //Zeiger auf das Array, das die Kanten enthält
            end;
  PKnoten = ^TKnoten;

  TGraph = object(TMyDynamicMemoryRec) //Graph-Object baut auf einem dynamischen Speicher-Manager auf

  protected
    procedure DelKanteEqualAndDecKanteGreaterThan(n: IndexType);
    function CountKanten: IndexType;
  public

    constructor Create;
    destructor Destroy;
 

    function PointItem(n :IndexType): PKnoten; //gibt einen Zeiger auf den n-ten Knoten zurück
    function Add(const New :TKnotenAdd): Boolean; //erzeugt einen neuen Knoten
    function Delete(n :IndexType): Boolean; //löscht den n-ten Knoten
    procedure Clear; //löscht den gesammten Graphen
    procedure AddKante(New: TKanteAdd; BiDim: Boolean = False);
    function DeleteKante(n, m :IndexType): Boolean;
    function ExistsKanteZuKnoten(n: IndexType): Boolean;

    procedure ZeroKnotenMarken; //setzt alle Knotenmarken des Graphen auf 0
    procedure ZeroKantenMarken; //setzt alle Kantenmarken des Graphen auf 0
    function ExistsConnection(StartIndex, EndIndex: IndexType): Boolean;
    procedure TraversDeep(StartIndex: IndexType);
    procedure TraversWidth(StartIndex: IndexType);
   procedure TransHull;
    function ShortesWay(StartIndex, EndIndex: IndexType; var Distance :Real; KantenCount: Boolean): Boolean;
    function TravellingSalesmanProblem(StartIndex, EndIndex: IndexType; var KantenCount: IndexType; var Distance :Real; AriMax: Integer): Boolean;

    function SaveToFile(FileName: String): Boolean;
    function LoadFromFile(FileName: String; XOffs, YOffs: Integer): Boolean; virtual;
  end;
 
 

 zurück zur Startseite


e-mail

 
 
 
 
 
 
 
 
 

Last modified: Fri Nov 19 16:42:02 CET 1999