Pagini recente » Cod sursa (job #2157444) | Cod sursa (job #2940790) | Cod sursa (job #1646434) | Cod sursa (job #1891054) | Cod sursa (job #1668389)
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
#include <fstream>
using namespace std;
int n, m, i, x, y, s;
vector <vector <int> > graph;
vector <int> viz;
ifstream f ("darb.in");
ofstream g ("darb.out");
void DFS (int vertex){
int i, maxi = 0, mid1 = -1, mid2 = -1, niv = 1, aux;
if (vertex < 0 || vertex > n-1) return;
vector <int> s;
for (i = 0; i < n; i++) viz[i] = -1;
for (i = 0; i < n; i++) cout << viz[i] << " ";
int elem;
bool found;
s.push_back (vertex);
viz[vertex] = 1;
while (!s.empty()) {
elem = s[s.size() - 1]; cout << "elem: " << elem << "\t" << niv << endl;
found = false;
for (i = 0; i < graph[elem].size() && !found; i++)
if (viz[graph[elem][i]] == -1) {
found = true;
aux = i;
}
if (found) {
i = aux;
//cout << "i:" << i << endl;
s.push_back (graph[elem][i]);
//cout << graph[elem][i] << " ";
viz [graph[elem][i]] = 1;
niv++;
if (niv > maxi) {
maxi = niv;
if (s.size() % 2 == 0) {
mid1 = s[s.size() / 2];
mid2 = s[s.size() / 2 - 1];
}
else {
mid1 = s[s.size() / 2];
mid2 = -1;
}
}
}
else {
s.pop_back();
niv--;
}
}
g << maxi << endl;
/*if (mid2 != -1) cout << mid1 + 1 << " " << mid2 + 1;
else cout << mid1 + 1;*/
}
int BFS (int vertex){
int i;
if (vertex < 0 || vertex > n-1) return -1; //daca nodul are valoare invalida iesim
queue <int> q;
int elem;
q.push (vertex); //punem nodul de la care pornim in coada
viz[vertex] = 0;
while (!q.empty()) {
elem = q.front();
for (i = 0; i < graph[elem].size(); i++)
if (viz[graph[elem][i]] == -1) {
q.push (graph[elem][i]);
//cout << graph[elem][i] + 1 << " ";
viz [graph[elem][i]] = viz[elem] + 1;
}
q.pop(); //eliminam nodul pentru care am analizat deja vecinii
}
int maxi = 0;
for (i = 1; i < n; i++) if (viz[i] > viz[maxi]) maxi = i;
return maxi + 1; //intoarcem nodul cel mai indepartat
}
int main()
{
f >> n;
graph.resize(n);
viz.resize(n, -1);
for (i = 0; i < n - 1; i++)
{
f >> x >> y;
x--; y--;
graph[x].push_back(y);
graph[y].push_back(x);
}
//cout << BFS(0);
int cap = BFS(0);
cout << cap << endl;
DFS(cap - 1);
f.close();
g.close();
return 0;
}