Documente Academic
Documente Profesional
Documente Cultură
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();
}
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]<<" ";
}
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 main()
{ int i;
citire();
DF(r,1);
cout<<max;
}
4.
Se citeste un arbore cu n varfuri dat prin vectorul
TATA. Sa se afiseze frunzele arborelui.
Ex: Pentru vectorul de tati 2 0 2 1 3 se vor afisa
frunzele 4 si 5.
#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<<" ";
}
5.
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).
Ex: Pentru vectorul de tati 2 0 2 1 3 se vor afisa
urmatorii vectori:
Gradele: 2 2 2 1 1
Nivelele: 1 0 1 2 2
#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();
}
ifstream fin("k.in");
ofstream fout("k.out");
struct muchie
{
int x,y,c;
};
muchie a[100];
int n,m,x[100][100],c[100],p[100],b[100],k,nr;
void citire()
{
fin>>n>>m;
for(int i=1; i<=n;i++)
for(int j=1; j<=n; j++)
x[i][j]=32000;
for(i=1;i<=m;i++)
{
fin>>a[i].x>>a[i].y>>a[i].c;
x[a[i].x][a[i].y]=1;
x[a[i].y][a[i].x]=1;
}
}
void ordonare()
{
int i,gata;
muchie aux;
do{
gata=1;
for(i=1;i<m;i++)
if(a[i].c>a[i+1].c)
{
aux=a[i];
a[i]=a[i+1];
a[i+1]=aux;
gata=0;
}
}while(!gata);
}
void afis()
{ for(int k=1;k<=m;k++)
fout<<a[k].x<<" "<<a[k].y<<" "<<a[k].c<<"\n";
}
int main()
{
citire();
int i;
for(i=1;i<=n;i++) c[i]=i;
ordonare();
//afis();
k=1;nr=0;
do{
if(c[a[k].x]!=c[a[k].y])
{
fout<<a[k].x<<" "<<a[k].y<<" "<<a[k].c<<"\n";
if(c[a[k].x]<c[a[k].y]) bf(a[k].y,c[a[k].x]);
else bf(a[k].x,c[a[k].y]);
nr++;
}
k++;
}while(nr<n-1);
}
7.Se citeste un arbore cu n varfuri dat prin vectorul
TATA si apoi un varf k. Sa se afiseze vectorul
TATA obtinut prin mutarea radacinii arborelui in
varful k.
Ex: Pentru vectorul de tati 2 0 2 1 3 si nodul k=5 se
va afisa vectorul 2 3 5 1 0.
#include<iostream.h>
int n,t[100],k;
void citire()
{ cin>>n;
for(int i=1;i<=n;i++) cin>>t[i];
cin>>k;
}
void f(int k)
{ if(t[k]) f(t[k]);
t[t[k]]=k;
}
void afis()
{ for(int i=1;i<=n;i++) cout<<t[i]<<" ";
}
void main()
{ citire();
f(k);
t[k]=0;
afis();
}
#include<fstream.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<<" ";
}
void ff(int r)
{ if(t[r]) ff(t[r]);
t[t[r]]=r;
}
void lant(int r)
{ if(t[r]) lant(t[r]);
fout<<r<<" ";
}
void main()
{ citire();
for(int i=1;i<=n;i++)
if(f[i]==0)
{ for(int j=1;j<=n;j++)
p[j]=0;
df(i,0,i);
}
ff(mx); t[mx]=0;
lant(my);
}
10.
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.
Exemplu:
sd.in
7
2400700
3560000
Se va afisa:
Preordine: 1 2 4 5 7 3 6
Inordine: 4 2 7 5 1 3 6
Postordine: 4 7 5 2 6 3 1
Pe nivele: 1 2 3 4 5 6 7
Adancimea: 3
#include<fstream>
using namespace std;
ifstream fin("sd.in");
ofstream fout("arb.out");
int S[100],D[100],P[100],r,n,i,maxx;
void RSD(int n)
{
fout<<n<<" ";
if(S[n]) RSD(S[n]);
if(D[n]) RSD(D[n]);
}
void SRD(int n)
{
if(S[n]) SRD(S[n]);
fout<<n<<" ";
if(D[n]) SRD(D[n]);
}
void SDR(int n)
{
if(S[n]) SDR(S[n]);
if(D[n]) SDR(D[n]);
fout<<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++) fout<<x[i]<<" ";
}
int main()
{
fin>>n;
for(i=1;i<=n;i++) P[i]=0;
for(i=1;i<=n;i++)
{
fin>>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;
fout<<"Preordine: ";
RSD(r);
fout<<endl;
fout<<"Inordine: ";
SRD(r);
fout<<endl;
fout<<"Postordine: ";
SDR(r);
fout<<endl;
fout<<"Pe nivele: ";
BF(r);
fout<<endl;
adancime(r,0);
fout<<"Adancimea: ";
fout<<maxx;
fin.close();
fout.close();
return 0;
}