Professional Documents
Culture Documents
void DF1(int x)
{
viz1[x]=1;
for(int i=1; i<=n; i++)
if(a[x][i]==1 && viz1[i]==0)
DF1(i);
}
// BF
void BF(int R)
{
p=u=1;///curatare a lui viz
c[1]=R;viz[R]=1;
while(p<=u)
{
///prelucrez c[p];
for(i=1; i<=n; i++)
if(a[c[p]][i]==1 && viz[i]==0)
{
viz[i]=1;
u++;c[u]=i;
cout<<i<<" ";
}
p++;
}}
viz[i]=0;
}
int main()
{
f>>n;
for(int i=1; i<=n; i++)
{
f>>T[i];
if(T[i]==0)R=i;
}
BF(R);
for(int i=1; i<=n; i++)
g<<viz[i]<<' ';
reset();
g<<endl;
///descendentii nodului X:
int X;
f>>X;
BF(X);
for(int i=1;i<=n;i++)
if(viz[i]>=1)
g<<i<<' ';
reset();
g<<endl;
/// verisorii unui nod
int Y;
f>>Y;
BF(Y);
int nr=0;
for(int i=1;i<=n;i++)
if(viz[Y]==viz[i] && T[Y]!=T[i] && T[T[Y]]==T[T[i]])
{g<<i<<' ';nr++;}
if(nr==0)
g<<Y<<" nu are verisori";
return 0;
}
// Frunzele
#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<<" ";
}
#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>
fstream fin("date.in",ios::in);
fstream fout("date.out",ios::out);
int a[20][20],t[100],n,max,mx,my,p[100],f[100];
void citire()
{ int i;
fin>>n;
for(i=1;i<=n;i++)
{fin>>t[i];
f[t[i]]=1;
a[i][t[i]]=1;
a[t[i]][i]=1;
}
}
void df( int r, int niv,int k)
{p[k]=1;
if(niv>max){ max=niv;
mx=r;
my=k;
}
for(int i=1;i<=n;i++)
if( !p[i] && a[k][i])
df(r,niv+1,i);
}
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);
}
fin>>t[i];
for(int i=1;i<=n;i++)
fin>>s[i];
int main()
{
citire();
int ok=1,gasit;
for(int i=1;i<=n;i++)
if(t[i])
{
gasit=0;
for(int j=1;j<=n;j++)
if(i==j && t[i]==s[j] || i==s[j] && t[i]==j)
gasit=1;
if(!gasit) ok=0;
}
if(ok) fout<<"da";
else fout<<"nu";
return 0;
}
//????????????????????????????????????????????????????
for(int i=1;i<=n;i++)
if(i==x) nivx=niv[i];
else
if(i==y) nivy=niv[i];
if(nivx>nivy)
while(nivx>nivy)
{x=t[x];
nivx--;}
else
while(nivx<nivy)
{y=t[y];
nivy--;}
while(x!=y)
{x=t[x];
y=t[y];}
fout<<x;
return 0;}
viz[i]=1;
inaltime(i);
for(int p=1;p<=n;p++)
if(niv[p]>maxim)
{maxim=niv[p];
radacina=i;}}
fout<<radacina<<" "<<maxim;
return 0;}
void bf(int r)
{int c[100],p=1,u=1;
c[1]=r;
viz[r]=1;
while(p<=u)
{for(int i=1;i<=n;i++)
if(a[c[p]][i]==1 && viz[i]==0)
{viz[i]=1;
t[i]=c[p];
c[++u]=i;
}
p++;
}}
int main()
{fin>>n>>r;
for(int i=1;i<=n-1;i++)
{fin>>x>>y;
a[x][y]=1;
a[y][x]=1;}
t[r]=0;
bf(r);
for(int i=1;i<=n;i++)
fout<<t[i]<<" ";
return 0;}
Arbori de Cautare
///dublare chei frunze
#include <fstream>
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");
int n,v[100],i,minim,maxim;
struct nod{int info; nod*st,*dr;}*r;
void adaugare(int n, nod*&r)
{if(r)
{if(n<r->info) adaugare(n,r->st);
else adaugare(n,r->dr);}
else{r=new nod;
r->info=n;
r->st=0;
r->dr=0;}}
void SRD(nod *r)
{if(r)
{SRD(r->st);
fout<<r->info<<" ";
SRD(r->dr);}}
void parcurgere(nod *r)
{if(r)
{if(r->st==0 && r->dr==0)
r->info=2*r->info;
parcurgere(r->st);
parcurgere(r->dr);}}
int main()
{fin>>n;
for(int i=1;i<=n;i++)
{fin>>v[i];
adaugare(v[i],r);}
parcurgere(r);
SRD(r);
return 0;}
nod* i=r;
while(i->st)
{minim=i->st->info;
i=i->st;}
nod* j=r;
while(j->dr)
{maxim=j->dr->info;
j=j->dr;}
fout<<minim<<" "<<maxim<<endl;
SRD(r);
return 0;}
{
if(T[i]==0)
R=i;
}
fout<<R<<endl;
fin>>x;
T[R]=x;
T[x]=0;
for(int i=1; i<=n; i++)
fout<<T[i]<<"
";
return 0;
}
//Creare ABC
void adaugare (nod *&R, int n)
{
if(R!=0)
{
if(n<R->info)
adaugare(R->st,n);
else adaugare(R->dr,n);
}
else
{
R=new nod;
R->info=n;
R->st=0;
R->dr=0;
}
}
//Creare AB
nod * creare()
{
int n;
nod *c;
fin>>n;
if(n==0) return NULL;
else
{
c=new nod;
c->info=n;
c->st=creare();
c->dr=creare();
return c;
}
}
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("date.in");
ofstream fout ("date.out");
struct nod
{
int info;
nod *st, *dr;
}*R;
int ok=0, ok1=0, ok2=0;
void creare2(nod *& r)
{
int n;
fin>>n;
if(n==0) r=NULL;
else
{
r= new nod;
r->info=n;
creare2(r->st);
creare2(r->dr);
}
}
void RSD(nod *r)
{
if(r!= NULL)
{
fout<<r->info<<"
";
RSD(r->st);
RSD(r->dr);
}
}
/// Verifica daca AB este ABC
void verificare(nod *r)
{
if(r!= NULL)
{
if( (r->st!=NULL &&r->st->info>r->info) || (r->dr!=NULL
&&r->dr->info<r->info))
{
fout<<"Nu este ABC";
ok=1;
return;
}
else
{
verificare(r->st);
verificare(r->dr);
}
}
}
/// Verificati daca AB este echilibrat
int inaltime(nod *r)
{
if(r==NULL) return 0;
else return 1+max(inaltime(r->st),inaltime(r->dr));
}
void echil(nod *r)
{
if(r)
{
if(inaltime(r->st)-inaltime(r->dr)>1)
{
ok1=1;
fout<<endl;
fout<<"Nu este echilibrat"<<endl;
return ;
}
else
{
echil(r->st);
echil(r->dr);
}
}
/// Verificati daca AB este perfect echilibrat
int noduri(nod *r)
{
if(r==NULL) return 0;
else return 1+noduri(r->st)+ noduri(r->dr);
}
void perfect_echil(nod *r)
{
if(r)
{
if(noduri(r->st)-noduri(r->dr)>1)
{
ok2=1;
fout<<endl;
fout<<"Nu este perfect echilibrat"<<endl;
return ;
}
else
{
perfect_echil(r->st);
perfect_echil(r->dr);
}
}
}
int main()
{
creare2(R);
RSD(R);
fout<<endl;
verificare(R);
fout<<endl;
if(ok==0) fout<<"Este ABC"<<endl;
echil(R);
if(ok1==0) fout<<"Este echilibrat"<<endl;
fout<<"Inaltimea arborelui este "<<inaltime(R)-1<<endl;
fout<<"Numarul de noduri ale arborelui este
"<<noduri(R)<<endl;
perfect_echil(R);
if(ok2==0) fout<<"Este perfect echilibrat"<<endl;
return 0;
}