Cod sursa(job #1703010)

Utilizator adrian.popoviciPopovici Adrian adrian.popovici Data 15 mai 2016 23:39:29
Problema Diametrul unui arbore Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.02 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

vector <vector <long> > graf;
vector <bool> visited;
vector <long> nr;
long n;

void Citire()
{
    long x,y;
    ifstream f("darb.in");
    f>>n;
    graf.resize(n);
    visited.resize(n,false);
    nr.resize(n,0);
    while (f>>x>>y)
    {
        x--;
        y--;
        graf[x].push_back(y);
        graf[y].push_back(x);
    }
}

void ResetViz()
{
    visited.clear();
    visited.empty();
    visited.resize(n, false);
}

void BFS(long x, long &capat)
{
    long i=0;
    nr[x]=0;
    vector <long> coada;
    coada.push_back(x);
    visited[x]=true;
    while (i<coada.size())
    {
        for (long j=0;j<graf[coada[i]].size();j++)
        {
            if (!visited[graf[coada[i]][j]])
            {
                nr[graf[coada[i]][j]]=nr[coada[i]]+1;
                coada.push_back(graf[coada[i]][j]);
                visited[graf[coada[i]][j]]=true;
            }
        }
        capat=coada[i];
        i++;
    }
    ResetViz();
    //return dist;
}

/*void BFS(long x, long y, vector <long> &nr )
{
    nr.resize(n,0);
    nr[x]=0;
    long i=0;
    vector <long> coada;
    coada.push_back(x);
    visited[x]=true;
    while (i<coada.size())
    {
        for (long j=0;j<graf[coada[i]].size();j++)
        {
            if (!visited[graf[coada[i]][j]])
            {
                if (graf[coada[i]][j]==y)
                {
                    nr[y]=nr[coada[i]]+1;
                    return;
                }
                nr[graf[coada[i]][j]]=nr[coada[i]]+1;
                coada.push_back(graf[coada[i]][j]);
                visited[graf[coada[i]][j]]=true;
            }

        }
        i++;
        cout<<endl;
    }
    ResetViz();
}*/

int main()
{
    Citire();
    long c1,c2,dist=0;
    BFS(0,c1);
    cout<<endl;
    BFS(c1,c2);
    cout<<endl;
    ofstream g("darb.out");
    g<<nr[c2]<<" ";
    g.close();
    return 0;
}