Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

X와의 절대 차이가 C++에서 최대값을 제공하는 노드 찾기

<시간/>

트리가 있고 모든 노드의 가중치와 정수 x가 있다고 가정합니다. |weight[i] - x|와 같은 노드 i를 찾아야 합니다. 최소입니다. 그래프가 아래와 같을 때 x =15

X와의 절대 차이가 C++에서 최대값을 제공하는 노드 찾기

출력은 3이 됩니다. 이제 다른 노드의 경우 아래와 같을 것입니다.

노드 1, |5 – 15| =10

노드 2, |10 – 15| =5

노드 3, |11 – 15| =4

노드 4, |8 – 15| =7

노드 5, |6 – 15| =9

아이디어는 간단합니다. 우리는 트리에서 DFS를 수행하고 x와의 가중 절대 차이가 최소값을 제공하는 노드를 추적합니다.

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int min_value = INT_MAX, x, result;
vector<int> graph[100];
vector<int> weight(100);
void dfs(int node, int parent) {
   if (min_value > abs(weight[node] - x)) {
      min_value = abs(weight[node] - x);
      result = node;
   }
   for (int to : graph[node]) {
      if (to == parent)
      continue;
      dfs(to, node);
   }
}
int main() {
   x = 15;
   weight[1] = 5;
   weight[2] = 10;
   weight[3] = 11;
   weight[4] = 8;
   weight[5] = 6;
   graph[1].push_back(2);
   graph[2].push_back(3);
   graph[2].push_back(4);
   graph[1].push_back(5);
   dfs(1, 1);
   cout << "The node number is: " << result;
}

출력

The node number is: 3