algorytm.org

Implementacja w Delphi/Pascal



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Generowanie grafu z cyklem Eulera - Implementacja w Delphi/Pascal
Ocena użytkownikóww: *****  / 2
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 31 lipca 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

euler/graf.pas:
//Tomasz Lubiński (c)2001
//www.algorytm.org
unit graf;

interface

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

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure GenerujClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Macierz: Array of Array of SmallInt;
  n, licznik: Integer;

implementation

{$R *.DFM}

//generowanie grafu - macierz dolnotrójkątna
procedure TForm1.GenerujClick(Sender: TObject);
var b,i,j,wierzcholek : Integer;
begin
Finalize(Macierz);
n:=StrToInt(edit1.text);      //liczba wierzcholkow
b:=StrToInt(edit2.text);      //stopien nasycenia grafu w %

//tworzenie macierzy dolnotrójkątnej dynamicznej
SetLength(Macierz, n+1);
for i:=0 to n do
 SetLength(Macierz[i], i);

//wyczysc graf
//Macierz[i, j] = 0 - oznacza brak krawedzi pomiedzy wierzcholkami i oraz j
//Macierz[i, j] = 1 - oznacza krawedz pomiedzy wierzcholkami i oraz j
for i:=0 to n do
 for j:=0 to i-1 do
   Macierz[i, j] := 0;

//utworz graf o zadanym nasyceniu
randomize;
for i:=2 to n do
 for j:=1 to i-1 do
  if random(100)<b then Macierz[i,j]:=1;   //ustawienie stopnia nasycenia

//modyfikacja grafu tak by istnial cykl EULERA
for wierzcholek:=1 to n-1 do        //parzystosc wierzcholkow
   begin
    //oblicz stopien wierzcholka
    i:=0;
    for j:=1 to wierzcholek-1 do
     if macierz[wierzcholek, j]>0 then i:=i+1;
    for j:=wierzcholek+1 to n do
     if macierz[j, wierzcholek]>0 then i:=i+1;
    //jezeli stopien wierzcholka nie jest parzysty
    if (i mod 2) <> 0 then
     begin
      i:=Random(n-wierzcholek)+wierzcholek+1;
       if macierz[i, wierzcholek]>0 then
          macierz[i, wierzcholek]:=0
       else
          macierz[i, wierzcholek]:=1;
     end;
   end;
end;



end.
Dodaj komentarz