Informatică, întrebare adresată de 1999Andy, 9 ani în urmă

In Pascal va rog: Se citește un arbore cu n vârfuri dat prin vectorul muchiilor și apoi se citește vârful rădăcină. Să se construiască și să se afișeze vectorul TATA.
Exemplu: Pentru un arbore cu 5 noduri, cu muchiile [1,2] [2,3] [1,4] [3,5] și rădăcina 2 se
obține vectorul TATA 2 0 2 1 3

Răspunsuri la întrebare

Răspuns de blindseeker90
1
O sa presupun ca formatul de intrare va fi
4
1 2
2 3
1 4
3 5
2

Adica nr de muchii initial, fiecare pereche de muchii, si apoi radacina
Am facut o structura care memoreaza capetele muchiilor si valoarea booleana sterge care este initializata cu fals.
Trecem prin fiecare dintre muchii, comparam valoarea muchiei cu cele din vectorul de cautat care are parintii respectivi. Daca o valoare din perechea muchiei este egala cu parintele din vectorul de cautat, marcam ca atare in vectorul tata, si apoi adaugam copilul ca posibil parinte in vectorul de cautat Muchiar fiind deja folosita, o marcam la sterge ca fiind adevarata si nu va mai fi apoi cautata la treceri ulterioare.

Codul apare scris mai jos

program arbore;

type muchie=record
     x,y:integer;
     sterge:boolean;
end;
type muchii=array[1..25] of muchie;


var
tata:array[1..25] of integer;
de_cautat:array[1..25] of integer;
relatie:muchii;
radacina,nr_muchii,i,n,nr_cautat,cautat_actual:integer;
begin
nr_cautat:=0;
readln(nr_muchii);
for i:=1 to nr_muchii do
begin
read(relatie[i].x);
read(relatie[i].y);
relatie[i].sterge:=false;
end;
readln(radacina);
inc(nr_cautat);
de_cautat[nr_cautat]:=radacina;
tata[radacina]:=0;
n:=radacina;
cautat_actual:=1;
while cautat_actual<=nr_cautat do
begin
for i:=1 to nr_muchii do
begin
   if not relatie[i].sterge then
   begin
     if relatie[i].x=de_cautat[cautat_actual] then
        begin
        tata[relatie[i].y]:=relatie[i].x;
        inc(nr_cautat);
        de_cautat[nr_cautat]:=relatie[i].y;
        relatie[i].sterge:=true;
        end
     else if relatie[i].y=de_cautat[cautat_actual] then
        begin
        tata[relatie[i].x]:=relatie[i].y;
        inc(nr_cautat);
        de_cautat[nr_cautat]:=relatie[i].x;
        relatie[i].sterge:=true;
        end;
     if relatie[i].x>n then
        n:=relatie[i].x
     else if relatie[i].y>n then
        n:=relatie[i].y;       
   end;
end;
inc(cautat_actual);
end;

for i:=1 to n do
   write(tata[i],' ');

end.


Alte întrebări interesante