Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- void dfs_top (int cur, int parent, int curDistance, int& maxDist, int& maxDistVert, std::vector <std::vector<int> >& graph) {
- //Returns max distanced vertex
- //пэрэнт - предок предыдущей вершины
- for (int i = 0; i < graph[cur].size(); i++) {
- if (curDistance > maxDist && graph[cur][i] != parent) {
- maxDist = curDistance;
- maxDistVert = graph[cur][i];
- }
- int par;
- for (int j = 0; j < graph[cur].size(); j++) {
- if (graph[cur][j] > graph[cur][i]) {
- par = graph[cur][j];
- return;
- }
- }
- dfs_top(graph[cur][i], par, curDistance + 1, maxDist, maxDistVert, graph);
- }
- }
- //ищет расстояние до точки, записывает в массив под индексом вершины, от которой искали расстояние
- void dfs_diameter () {
- }
- bool comparison (std::vector<int>)
- int main() {
- int n;
- std::cin >> n;
- std::vector <std::vector<int> > vec(n);
- int num1;
- for (int i = 0; i < n-1; i++) {
- int num1;
- int num2;
- std:: cin >> num2;
- if (num1 < num2) {
- vec[num1].push_back(num2);
- vec[num2].push_back(num1);
- }
- else {
- vec[num2].push_back(num1);
- vec[num1].push_back(num2);
- }
- }
- int maxDist;
- int maxDistVert1;
- dfs_top (0, -1, 0, maxDist, maxDistVert1, vec);
- int maxDistVert2;
- int parent;
- for (int i = 0; i < vec[maxDistVert1].size(); i++) {
- if (vec[maxDistVert1][i] > maxDistVert1) {
- parent = vec[maxDistVert1][i];
- break;
- }
- }
- dfs_top (maxDistVert1, parent, 0, maxDist, maxDistVert2, vec);
- int* arrayDist1 = new int [n];
- int* arrayDist2 = new int [n];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement