Răspuns :
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.
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.
Vă mulțumim că ați ales să vizitați platforma noastră dedicată Informatică. Ne bucurăm dacă informațiile oferite v-au fost de ajutor. Pentru orice întrebare sau clarificare suplimentară, echipa noastră vă stă la dispoziție. Revenirea dumneavoastră ne onorează – nu uitați să ne salvați în lista de favorite!