Coding_Test_C++

BaekJoon 1967번: 트리의 지름

트리의 지름을 구하는 알고리즘은 앞서 푼 BaekJoon 1167번: 트리의 지름 문제와 같다.

pearlcrum.tistory.com/4?category=989437

 

BaekJoon 1167번: 트리의 지름

트리의 지름을 구하는 알고리즘이다. BFS를 써서 문제를 해결하고자 했으나 마땅한 방법이 생각나지 않아 다른 블로그의 힘을 빌렸다. blog.myungwoo.kr/112 트리의 지름 구하기 트리에서 지름이란, 가

pearlcrum.tistory.com

풀이법

1) 아무 노드 a (이 코드의 경우 1)를 이용해서 a에서 가장 먼 점인 x를 구한다.

2) x에서 가장 먼 노드인 y를 구하고 x-y 간의 거리를 구한다. (지름 구하기)

3) BFS를 이용하여 vistied 배열과 dist 배열을 사용하여 문제를 해결한다. 이 때 초기화를 잊지 말자

 

include <iostream>
#include <queue>
#include <vector>
#include <cstring>

#define INF 10001
using namespace std;

int n;
vector<pair<int, int>> vec[INF];
int maxVal,maxIndex;
bool visited[INF];
int dist[INF];

int bfs(int num)
{
	for (int i = 1; i <= n; i++)
	{
		visited[i] = false;
		dist[i] = 0;
	}
	
	visited[num] = true;
	queue<int> q;
	q.push(num);
	maxVal = 0;
	maxIndex = 0;
	while (!q.empty())
	{
		int now = q.front();
		q.pop();
		for (int i = 0; i < vec[now].size(); i++)
		{
			int next = vec[now][i].first;
			int w = dist[now]+vec[now][i].second;
			if (!visited[next])
			{
				dist[next] = w;
				if (w > maxVal)
				{
					maxVal = w;
					maxIndex = next;
				}
				visited[next] = true;
				q.push(next);
			}
		}
	}
	return maxIndex;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin >> n;
	for (int i = 0; i < n - 1; i++)
	{
		int parent, child, weight;
		cin >> parent >> child >> weight;
		vec[parent].push_back({ child,weight });
		vec[child].push_back({ parent,weight });
	}
	int x=bfs(1);
	bfs(x);
	cout << maxVal;
}

 

github.com/pearlcrum/CodingTest/tree/main

 

pearlcrum/CodingTest

ForPracticingCodingTest. Contribute to pearlcrum/CodingTest development by creating an account on GitHub.

github.com

 

'Coding_Test_C++' 카테고리의 다른 글

BaekJoon 15649번: N과 M(1)  (0) 2021.04.05
BaekJoon 5639번: 이진 검색 트리  (0) 2021.04.05
BaekJoon 1991번: 트리 순회  (0) 2021.04.05
BaekJoon 1167번: 트리의 지름  (0) 2021.04.03
BaekJoon 11725번: 트리의 부모 찾기  (0) 2021.04.03