Cod sursa(job #2424608)

Utilizator justicebringerArghire Gabriel justicebringer Data 23 mai 2019 14:48:57
Problema Diametrul unui arbore Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.18 kb
#include <bits/stdc++.h>

using namespace std;

void addEdge(vector <int> adj[], int u, int v){
    adj[u].push_back(v);
    adj[v].push_back(u);
}

void showList(vector <int> adj[], int dim){
    for(int i = 1; i <= dim; i++){
        cout << i << ": ";
        for(auto it: adj[i]){
            cout << it << " ";
        }
        cout << endl;
    }
}

map <int, bool> VIZ;
void DFS(vector <int> adj[], int start, int &nod){
    //cout << start << " ";
    
    VIZ[start] = true;
    nod = start;
    for(auto it: adj[start])
        if(!VIZ[it])
            DFS(adj, it, nod);
}

queue <int> Q;
vector <int> PARENT(1000);
void BFS(vector <int> adj[], int start, int &nod, int &nr){
    PARENT[start] = start;
    while(!Q.empty()){
        int cr = Q.front();
        cout << cr << " ";
        nod = cr;
        nr += 1;
        Q.pop();

        for(auto it: adj[cr])
            if(!VIZ[it]){
                Q.push(it);
                PARENT[it] = cr;
                VIZ[cr] = true;
            } 
    }
}

int main()
{
    ifstream fin("darb.in");
    int noduri;
    fin >> noduri;

    vector <int> adj[noduri + 1];
    for(int i = 1; i <= noduri - 1; i++){
        int x, y;
        fin >> x >> y;
        addEdge(adj, x, y);
    }

    //showList(adj, noduri);
    int nod = 0;

    for(int i = 1; i <= noduri; i ++)
        PARENT[i] = 0;
    
    for(int i = 1; i <= noduri; i++)
        VIZ[i] = false;

    int start = 1;
    Q.push(start);
    VIZ[start] = true;

    int nr = 0;
    BFS(adj, start, nod, nr);
    cout << " \nAm ajuns in nodul " << nod << " \n";

    //-----------------------------------Prima parcurgere-----------------

    for(int i = 1; i <= noduri; i ++)
        PARENT[i] = 0;

    for(int i = 1; i <= noduri; i++)
        VIZ[i] = false;

    while (!Q.empty()){
        Q.pop();
    }
    
    Q.push(nod);
    VIZ[nod] = true;
    
    cout << endl;
    nr = 0;
    BFS(adj, nod, noduri, nr);
    
    cout << endl;
    
    cout << "Nod: " << nod << "Noduri: " << noduri;
    nr = 1;
    while(nod != noduri){
        nr += 1;
        noduri = PARENT[noduri];
    }

    ofstream fout("darb.out");
    fout << nr;
    cout << endl << "Pasi: " << nr << endl;
    
    return 0;
}