개발/알고리즘

[백준] 노드사이의 거리(C++)

Majangnan 2025. 5. 4. 21:55

문제 링크

https://www.acmicpc.net/problem/1240

 

 

코드 구현

#include <iostream>
#include <vector>
#include <unordered_map>

using namespace std;

vector<bool> visited;
int answer = 0;

void dfs(int _node, int _end, int _dist, const vector<vector<int>>& tree)
{
	if (_node == _end)
	{
		answer += _dist;
		return;
	}

	for (int i = 0; i < tree.size(); i++)
	{
		if (tree[_node][i] && !visited[i])
		{
			visited[i] = true;
			dfs(i, _end, tree[_node][i] + _dist, tree);
			visited[i] = false;
		}
	}

	return;
}

int main()
{
	int N, M;
	cin >> N >> M;

	vector<vector<int>> tree(N, vector<int>(N));
	visited.resize(N);

	for (int i = 0; i < N - 1; i++)
	{
		int node1, node2, dist;
		cin >> node1 >> node2 >> dist;
		tree[node1 - 1][node2 - 1] = dist;
		tree[node2 - 1][node1 - 1] = dist;
	}

	for (int i = 0; i < M; i++)
	{
		answer = 0;

		// 거리를 구하고 싶은 노드 입력
		int num1, num2;
		cin >> num1 >> num2;

		visited[num1 - 1] = true;
		dfs(num1 - 1, num2 - 1, 0, tree);
		visited[num1 - 1] = false;

		cout << answer << endl;
	}

	return 0;
}

 

 

해결 방법

dfs를 이용하여 해결하였다. 2차 배열로 노드 간 연결 정보를 저장하고 방문체크를 하며 _node 와 _end가 같아지는 시점에 누적된 거리를 반환하도록 하였다.