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 accesat site-ul nostru dedicat Informatică. Sperăm că informațiile furnizate v-au fost utile. Dacă aveți întrebări sau aveți nevoie de asistență suplimentară, nu ezitați să ne contactați. Vă așteptăm cu drag să reveniți și nu uitați să ne salvați la favorite!