DFS w Pascalu.

0

Witam, robię program, który wczytuje graf i robi na nim niepełnego DFS'a, jednak w jednej z procedur coś jest nie tak i nie potrafię znaleźć błędu, proszę o pomoc:

type lista=^element;

element = record
  pole:integer;
  next:lista
end;

type graf=array [1..11] of lista;
type kolory=(czarny,szary,bialy);

var
  i, time: integer;
  ef: array[1..11] of integer;
  kolor: array[1..11] of kolory;
  LI: graf;
  f: text;

procedure wczytaj_graf (var f:text);
var
  a, b: integer;
  l: lista;
begin
  for i := 1 to 10 do
    LI[i] := nil;

  while not eof(f) do
  begin
    readln(f, a, b);
    l := LI[a];
    new(LI[a]);
    LI[a]^.pole := b;
    I[a]^.next := l;
  end;
end;

procedure DFS_odwiedz(u:integer);
var
  v: lista;
begin
  kolor[u] := szary;
  v := LI[u];
  time := time + 1;

  while v<>nil do
  begin
    writeln(v^.pole);

    if kolor[v^.pole] = bialy then
      DFS_odwiedz(v^.pole);
  end;

  kolor[u] := czarny;
  time := time + 1;
  ef[u] := time;
end;

procedure DFS;
begin
  for i := 1 to 10 do
    kolor[i] := bialy;

  time := 0;

  for i := 1 to 10 do
    if kolor[i] = bialy then
      DFS_odwiedz(i);
end;

begin
  assign(f, 'C:\FPC\Pascall.txt');
  reset(f);
  wczytaj_graf(f);
  close(f);
  DFS;
  writeln(':)');
  readln;
end.

Graf, który sobie wczytuję to:
1->2->3->4->5->6->7->8->9 i program w nieskończoność wypisuje 9.

Dzięki za pomoc.

1

Pomijając masochistyczne formatowanie i łamanie wszelkich konwencji nazewnictwa zmiennych/procedur/funkcji oraz typów:

procedure DFS_odwiedz(u:integer);
 var v:lista;
begin
        kolor[u]:=szary;
        v:=LI[u];
        time:=time+1;
        while v<>nil do  begin
        writeln(v^.pole);
                if kolor[v^.pole] = bialy then
                        DFS_odwiedz(v^.pole);
                        end;
                kolor[u]:=czarny; time:=time+1; ef[u]:=time;
end;

Jeżeli sterowanie wejdzie do kodu pętli while, v nigdy nie stanie się równe nil.

0

Okej, dziękuję, chyba się udało : )

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