Sunteți pe pagina 1din 7

Arbori

Probleme
1. Se citeste un arbore cu n varfuri dat prin vectorul TATA.
a) Sa se afiseze muchiile arborelui
b) Sa se construiasca si sa se afiseze matricea de adiacenta a arborelui.
#include<iostream.h>
int n, T[100], a[100][100];
void afis()
{ int i,j;
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
void main()
{ int i;
cin>>n;
for(i=1;i<=n;i++) cin>>T[i];
for(i=1;i<=n;i++)
if(T[i]!=0)
{ cout<<"["<<T[i]<<","<<i<<"] ";
a[i][T[i]]=a[T[i]][i]=1;
}
cout<<endl;
afis(); return 0;
}
2. Se citeste un arbore cu n varfuri dat prin vectorul muchiilor si apoi se citeste varful
radacina. Sa se construiasca si sa se afiseze vectorul TATA.
#include<iostream.h>
int n, r, T[100], a[100][100], p[100];
void citire()
{ int i,x,y;
cin>>n;
for(i=1;i<=n-1;i++)
{ cin>>x>>y;
a[x][y]=a[y][x]=1;}
cin>>r;
}
void BF(int r)
{ int s,d,i,x[100];
d=s=1;
x[1]=r; p[r]=1;
while (s<=d)

{ for(i=1;i<=n;i++)
if(a[x[s]][i] &&!p[i])
{ d++; x[d]=i;
p[i]=1; T[i]=x[s];
}
s++;
}
}
void main()
{ int i;
citire();
BF(r);
for(i=1;i<=n;i++) cout<<T[i]<<" ";
}
3. Se citeste un arbore cu n varfuri dat prin vectorul TATA. Sa se afiseze frunzele arborelui.
#include<iostream.h>
int n, T[100], p[100];
void main()
{ int i;
cin>>n;
for(i=1;i<=n;i++)
{ cin>>T[i];
p[T[i]]=1;
}
for(i=1;i<=n;i++)
if(!p[i]) cout<<i<<" ";
}
4. Se citeste un arbore cu n varfuri dat prin vectorul TATA.
a) Sa se afiseze gradele varfurilor.
b) Sa se afiseze pentru fiecare varf nivelul pe care se afla (numerotarea nivelelor incepe de la
0-radacina).
#include<iostream.h>
int n,r, T[100], D[100], p[100], niv[100];
void afis()
{ for(int i=1;i<=n;i++) cout<<D[i]<<" ";
cout<<endl;
for(i=1;i<=n;i++) cout<<niv[i]<<" ";
}
void df(int r)
{for(int i=1;i<=n;i++)
if(T[i]==r && !p[i])
{ p[i]=1;
niv[i]=niv[r]+1;
df(i);
}
}

void main()
{ int i;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>T[i];
if(T[i]!=0) { D[i]++;
D[T[i]]++;
}
}
for(i=1;i<=n;i++)
if(T[i]==0) r=i;
niv[r]=0;
df(r);
afis();
}
5. Se citeste o padure cu n varfuri prin vectorul de tati. Sa se determine din cati arbori este
formata padurea.
#include<fstream.h>
#include<iostream.h>
ifstream f("date.in");
ofstream g("date.out");
int t[100],n;
void citire()
{f>>n;
for(int i=1;i<=n;i++)
f>>t[i];
}
void main()
{citire();
int k=0;
for(int i=1;i<=n;i++)
if(t[i]==0) k++;
g<<k<<" ";
f.close();g.close();return 0;
}
6. Din fisierul sd.in se citeste un numar natural n reprezentand numarul de varfuri ale unui
arbore binar si apoi vectorii S si D pentru descendentii fiecarui nod din arbore.
a) Sa se parcurga arborele in preordine, inordine si postordine.
b) Sa se parcurga arborele pe nivele
c) Sa se calculeze si sa se afiseze inaltimea arborelui.
#include<fstream.h>
#include<iostream.h>
ifstream f("sd.in");
ofstream g("arb.out");
int S[100],D[100],P[100],r,n,i,maxx;

void RSD(int n)
{g<<n<<" ";
if(S[n]) RSD(S[n]);
if(D[n]) RSD(D[n]);
}
void SRD(int n)
{if(S[n]) SRD(S[n]);
g<<n<<" ";
if(D[n]) SRD(D[n]);
}
void SDR(int n)
{if(S[n]) SDR(S[n]);
if(D[n]) SDR(D[n]);
g<<n<<" ";
}
void BF(int r)
{int x[100],i,j;
i=1;j=i;
x[1]=r;
while(i<=j) {if(S[x[i]]) x[++j]=S[i];
if(D[x[i]]) x[++j]=D[i];
i++;}
for(i=1;i<=n;i++) g<<x[i]<<" ";
}
void adancime(int n, int niv)
{if(niv>maxx) maxx=niv;
if(S[n]) adancime(S[n],niv+1);
if(D[n]) adancime(D[n],niv+1);
}
int main()
{f>>n;
for(i=1;i<=n;i++) P[i]=0;
for(i=1;i<=n;i++)
{f>>S[i];
P[S[i]]=1;
}
for(i=1;i<=n;i++)
{fin>>D[i];
P[D[i]]=1;
}
for(i=1;i<=n;i++)
if(P[i]==0) r=i;
g<<"Preordine: ";RSD(r);g<<endl;
g<<"Inordine: ";SRD(r);g<<endl;
g<<"Postordine: ";SDR(r);g<<endl;
g<<"Pe nivele: ";BF(r);g<<endl;
g<<"Adancimea: "; adancime(r,0);g<<maxx;
f.close();g.close();return 0;
}

7. Arbore partial de cost minim (cu algoritmul lui Prim).


#include<fstream.h>
#include<iostream.h>
ifstream f("k.in");
ofstream g("k.out");
const int inf=1<<20;
int n,m,A[100][100],P[100];
void citire()
{ int i,j,k,c;
f>>n>>m;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
A[i][j]=A[j][i]=inf;
for(int k=1;k<=m;k++)
{ fin>>i>>j>>c;
A[i][j]=A[j][i]=c;
}
}
int main()
{ int i,k,minn,x;
citire();
for(i=2;i<=n;i++) P[i]=1;
for(k=1;k<n;k++)
{
minn=inf;
for(i=1;i<=n;i++)
if(P[i] && A[P[i]][i]<minn)
{
minn=A[P[i]][i]; x=i;
}
g<<P[x]<<" "<<x<<" "<<A[P[x]][x]<<endl;
for(i=1;i<=n;i++)
if(P[i] && A[P[i]][i]>A[i][x])
P[i]=x;
P[x]=0;
}
f.close();g.close();return 0;
}
8. Arbore partial de cost minim (cu algoritmul lui Kruskal).
#include<fstream.h>
#include<iostream.h>
ifstream f("k.in");
ofstream g("k.out");
struct muchie{int x,y,c;};
muchie V[100];
int n,m,A[100][100],P[100],k;
void citire()

f>>n>>m;
for(int i=1;i<=m;i++)
f>>V[i].x>>V[i].y>>V[i].c;

}
void colorare(int r,int cul)
{ int s,d,i,X[100];
s=d=1;
X[1]=r;
P[r]=1;
while(s<=d)
{for(int i=1;i<=n;i++)
if(P[i]!=cul && A[X[s]][i])
{d++; X[d]=i; P[i]=cul;
}
s++;
}
}
void ordonare()
{ muchie aux;
for(int i=1;i<m;i++)
for(int j=i+1;j<=m;j++)
if(V[i].c>V[j].c)
{aux=V[i];
V[i]=V[j];
V[j]=aux;
}
}
int main()
{ int i;
citire();
for(i=1;i<=n;i++) P[i]=i;
ordonare();
k=0; i=1;
while(k<n-1)
{if(P[V[i].x]!=P[V[i].y])
{g<<V[i].x<<" "<<V[i].y<<" "<<V[i].c<<"\n";
A[V[i].x][V[i].y]=A[V[i].y][V[i].x]=1;
if(P[V[i].x]<P[V[i].y]) colorare(V[i].y,P[V[i].x]);
else colorare(V[i].x,P[V[i].y]);
k++;
}i++;
}
f.close();g.close();return 0;
}
9. Se citeste un numar natural n. Construiti un arbore cu proprietatea ca fiecare varf are
numarul de descendenti directi cu 1 mai mare decat nivelul pe care se afla. Exceptie fac
frunzele si nodul pentru care se termina cele n varfuri. Astfel, radacina (aflata pe nivelul 0)
are un singur descendent direct, varful de pe nivelul 1 are 2, cele de pe nivelul 2 au cate trei,
etc. Arborele va fi reprezetat prin vectorul legaturilor de tip tata.

#include<fstream.h>
#include<iostream.h>
int t[100],n, inf=15000;
ifstream f("date.in");
ofstream g("date.out");
int main()
{ int v,k,niv,p,i;
f>>n;
t[1]=0;p=1;
niv=1;
k=2;
v=1;
while(k<=n)
{p=p*niv;
for(i=1;i<=p && k<=n;i++)
{ t[k++]=v;
if(i%niv==0) v++;
}
niv++;
}
for(i=1;i<=n;i++) g<<t[i]<<" ";
f.close();g.close();return 0;
}
10. Se da un arbore binar cu n noduri prin vectorii de descendenti S si D. Afisati pe randuri
separate: - frunzele arborelui
- varfurile cu un singur descendent direct
- varfurile cu doi descendenti directi
#include<iostream.h>
#include<fstream.h>
ifstream f("date.in");
ofstream g("date.out");
int i,n,S[100],D[100];
int main()
{
f>>n;
for(i=1;i<=n;i++)
f>>S[i]>>D[i];
g<<"frunzele: ";
for(i=1;i<=n;i++)
if(S[i]==0 && D[i]==0) g<<i<<" ";
g<<"\nvarfurile cu un singur descendent: ";
for(i=1;i<=n;i++)
if(S[i]*D[i]==0 && S[i]+D[i]!=0) g<<i<<" ";
g<<"\nvarfurile cu doi descendenti: ";
for(i=1;i<=n;i++)
if(S[i] && D[i]) g<<i<<" ";
f.close();g.close();return 0;
}

S-ar putea să vă placă și

  • Senzatii
    Senzatii
    Document34 pagini
    Senzatii
    beventsx
    100% (2)
  • Conceptele de Tip Si Personalitate
    Conceptele de Tip Si Personalitate
    Document1 pagină
    Conceptele de Tip Si Personalitate
    Mihai Iulian Luca
    Încă nu există evaluări
  • Teoriile
    Teoriile
    Document2 pagini
    Teoriile
    Mihai Iulian Luca
    Încă nu există evaluări
  • Conceptele de Tip Si Personalitate
    Conceptele de Tip Si Personalitate
    Document1 pagină
    Conceptele de Tip Si Personalitate
    Mihai Iulian Luca
    Încă nu există evaluări
  • MBTI Explicare
    MBTI Explicare
    Document4 pagini
    MBTI Explicare
    Mihai Iulian Luca
    100% (1)
  • Zlate - Senzatii
    Zlate - Senzatii
    Document6 pagini
    Zlate - Senzatii
    Mihai Iulian Luca
    Încă nu există evaluări
  • Citerii Concluzii
    Citerii Concluzii
    Document1 pagină
    Citerii Concluzii
    Mihai Iulian Luca
    Încă nu există evaluări
  • Criterii
    Criterii
    Document2 pagini
    Criterii
    Mihai Iulian Luca
    Încă nu există evaluări
  • Imformatii Practice Folosire Spss
    Imformatii Practice Folosire Spss
    Document2 pagini
    Imformatii Practice Folosire Spss
    Mihai Iulian Luca
    Încă nu există evaluări
  • Clasificare
    Clasificare
    Document9 pagini
    Clasificare
    Mihai Iulian Luca
    Încă nu există evaluări
  • Senzatii
    Senzatii
    Document1 pagină
    Senzatii
    Mihai Iulian Luca
    Încă nu există evaluări
  • Senzatii - Cosmovici
    Senzatii - Cosmovici
    Document2 pagini
    Senzatii - Cosmovici
    Mihai Iulian Luca
    Încă nu există evaluări
  • Curs 2 Psiho Edu
    Curs 2 Psiho Edu
    Document4 pagini
    Curs 2 Psiho Edu
    Dana Duma
    Încă nu există evaluări
  • Curs 01
    Curs 01
    Document10 pagini
    Curs 01
    Ciprian Tironeac
    Încă nu există evaluări
  • Impulsul Sexual
    Impulsul Sexual
    Document1 pagină
    Impulsul Sexual
    Mihai Iulian Luca
    Încă nu există evaluări
  • Senzatii
    Senzatii
    Document1 pagină
    Senzatii
    Mihai Iulian Luca
    Încă nu există evaluări
  • Sugestii Analiza Film
    Sugestii Analiza Film
    Document1 pagină
    Sugestii Analiza Film
    Avi Alexandru
    Încă nu există evaluări
  • Historia - Portocala Mecanica
    Historia - Portocala Mecanica
    Document2 pagini
    Historia - Portocala Mecanica
    Mihai Iulian Luca
    Încă nu există evaluări
  • Teoria Invatarii
    Teoria Invatarii
    Document1 pagină
    Teoria Invatarii
    Mihai Iulian Luca
    Încă nu există evaluări
  • Gestaltismul
    Gestaltismul
    Document5 pagini
    Gestaltismul
    Mihai Iulian Luca
    100% (1)
  • Stadiile Dezvoltarii
    Stadiile Dezvoltarii
    Document2 pagini
    Stadiile Dezvoltarii
    Mihai Iulian Luca
    Încă nu există evaluări
  • Inconstient, Constient, Preconstient
    Inconstient, Constient, Preconstient
    Document1 pagină
    Inconstient, Constient, Preconstient
    Mihai Iulian Luca
    Încă nu există evaluări
  • Opinie - A Clockwork Orange
    Opinie - A Clockwork Orange
    Document1 pagină
    Opinie - A Clockwork Orange
    Mihai Iulian Luca
    Încă nu există evaluări
  • Conflictul Intrapsihic
    Conflictul Intrapsihic
    Document1 pagină
    Conflictul Intrapsihic
    Mihai Iulian Luca
    Încă nu există evaluări
  • Visele
    Visele
    Document5 pagini
    Visele
    Mihai Iulian Luca
    Încă nu există evaluări
  • Stadiile Somnului
    Stadiile Somnului
    Document1 pagină
    Stadiile Somnului
    Mihai Iulian Luca
    Încă nu există evaluări
  • Constiinta
    Constiinta
    Document2 pagini
    Constiinta
    Mihai Iulian Luca
    Încă nu există evaluări
  • Normalitatea
    Normalitatea
    Document1 pagină
    Normalitatea
    Mihai Iulian Luca
    Încă nu există evaluări
  • Definirea Somnului
    Definirea Somnului
    Document3 pagini
    Definirea Somnului
    Mihai Iulian Luca
    Încă nu există evaluări
  • Plumb
    Plumb
    Document2 pagini
    Plumb
    Mihai Iulian Luca
    Încă nu există evaluări