Przeszukiwanie drzewa - program nie działa?

0

Witam!

Czy ktoś mógłby mi powiedzieć dlaczego w/w program nie działa, tzn działa, ale nie wyświetla wyniku w oknie programu...

 Const
  MaxIloscWezlow = 100;

Type
  TypWezla = Word;
  Kolory   = (bialy, szary, czarny);
  Barwy    = Array[1..MaxIloscWezlow] Of Kolory;

  Graf     = Array[1..MaxIloscWezlow, 1..MaxIloscWezlow] Of Boolean;


Var
  a      : Graf;
  b      : Barwy;
  d      : Array[1..MaxIloscWezlow] Of TypWezla;
  g1, g2 : Array[1..MaxIloscWezlow] Of TypWezla;
  n, k   : TypWezla;

Procedure Odwiedz(k : TypWezla; Var krok : TypWezla);
Var
  j : TypWezla;
Begin
  krok:=krok+1;
  g1[k]:=krok;
  b[k]:=szary;
  For j:=1 To n Do
    If a[k, j] And (b[j]=bialy) Then
      Begin
        d[j]:=k;
        Odwiedz(j, krok);
      End;
  krok:=krok+1;
  g2[k]:=krok;
  b[k]:=czarny;
End;

Var
  i, j, t, czas : TypWezla;

Begin
  Write('Ilosc wierzcholkow = ');
  ReadLn(n);
  Write('Ilosc krawedzi = ');
  ReadLn(k);

  {Inicjacja tablic}
  For i:=1 To n Do
    For j:=1 To n Do a[i, j]:=False;
  For i:=1 To n Do
    Begin
      d[i]:=0;
      g1[i]:=0;
      g2[i]:=0;
      b[i]:=bialy;
    End;

  {Wczytaj krawedzie}
  For t:=1 To k Do
    Begin
      ReadLn(i, j);
      a[i, j]:=True;
    End;

  {Odwiedz wszystkie biale wierzcholki grafu}
  czas:=0;
  For i:=1 To n Do
    If b[i]=bialy Then Odwiedz(i, czas);


  WriteLn('Wierzcholek : Rozpoczeto : Zakonczono :');
  For i:=1 To n Do
    WriteLn(i, ' : ', g1[i], ' : ', g2[i]);
  ReadLn;
End. 
0

Nie zagłębiam się w algorytm, bo nie znam, a nie bardzo mam czas. Jednak wynik wyświetla na ekranie.

Problemem może być ten fragment kodu, który nie wyświetla informacji, żeby cokolwiek podać w postaci liczbowej:

   {Wczytaj krawedzie}
  For t:=1 To k Do
    Begin
      ReadLn(i, j);
      a[i, j]:=True;
    End;

Czy to tak ma być ? Nie wiem.

0

Delphi, czy TP, FPC ?

0

Pascal, a dokładniej DEV - Pascal...
to chyba nie chodzi o ten kawałek kodu, bo za wyświetlanie jest odpowiedzialna tylko ostatnia sekcja...

0

Pytanie skąd masz ten program, sam go pisałeś?

Ja jednak będę się upierał, iż Twoim problemem jest to, że nie wiesz co się dzieje w programie ;)

Spróbuj wrzucić ten kawałek kodu do tego programiku i zobacz o co mi chodziło.

For t:=1 To k Do
    Begin
      WriteLn('Podaj krawedz [',t,'] : ');
      ReadLn(i, j);
      a[i, j]:=True;
    End;
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1