Cod sursa(job #2145337)

Utilizator lucianrusu00Rusu Lucian lucianrusu00 Data 27 februarie 2018 12:00:55
Problema Diametrul unui arbore Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.61 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("darb.in");
ofstream g("darb.out");

struct muchii{
    int info;
    muchii *urm;
};

muchii *v[101];
int n,m,h[101],max1=-99999999;

void add(int x,int y)
{
    muchii *k=new muchii;
    k->info=x;
    k->urm=v[y];
    v[y]=k;
}

void citire()
{
    int x,y;
    f>>n;
    for(int i=1;i<=n-1;i++)
    {
        f>>x>>y;
        add(x,y);
        add(y,x);
    }
}

/*void afisare()
{
    for(int i=1;i<=n;i++)
    {
        g<<i<<": ";
        muchii *k=v[i];
        while(k!=NULL)
        {
            g<<k->info<<" ";
            k=k->urm;
        }
        g<<'\n';
    }
}*/

void prepare(bool viz[])
{
    for(int i=1;i<=n;i++)
        viz[i]=0;
}

void BF(int na)
{
    int c[101];
    int in,sf;
    bool viz[101];
    prepare(viz);
    in=sf=1;
    c[in]=na;
    h[c[in]]=1;
    viz[c[in]]=1;
    while(in<=sf)
    {
        muchii *k=v[c[in]];
        while(k!=NULL)
        {
            if(!viz[k->info])
            {
                sf++;
                c[sf]=k->info;
                viz[k->info]=1;
                h[c[sf]]=h[c[in]]+1;
            }
            k=k->urm;
        }
        in++;
    }
}

void afis()
{
    for(int i=1;i<=n;i++)
        g<<h[i]<<" ";
    g<<'\n';
}

void actualizare()
{
    for(int i=1;i<=n;i++)
        if(h[i]>max1)
            max1=h[i];
}

int main()
{
    citire();
    for(int i=1;i<=n;i++)
    {
        BF(i);
        actualizare();
        //afis();
    }
    g<<max1;
    //afisare();
    return 0;
}