<style>
html, body, .ui-content {
background: #222222;
color: #00BFFF;
}
/* 設定 code 模板 */
.markdown-body code,
.markdown-body tt {
background-color: #ffffff36;
}
.markdown-body .highlight pre,
.markdown-body pre {
color: #ddd;
background-color: #00000036;
}
.hljs-tag {
color: #ddd;
}
.token.operator {
background-color: transparent;
}
/* 設定連結 */
a,
.open-files-container li.selected a {
color: #89FFF8;
}
a:hover,
.open-files-container li.selected a:hover {
color: #89FFF890;
}
</style>
###### tags: `Leetcode`
# 2359. Find Closest Node to Given Two Nodes
###### Link : https://leetcode.com/problems/find-closest-node-to-given-two-nodes/
## 題目
找到離兩個node最近的node。
定義:
設node1到x的距離為dist1,node2到x的距離為dist2
找到最小的max(dist1, dist2)的x
x即為答案
## 程式碼
```cpp=
class Solution {
public:
int closestMeetingNode(vector<int>& edges, int node1, int node2) {
const int n = edges.size();
vector<int> dis1(n, -1), dis2(n, -1);
//dis1紀錄node1能走到的點的距離,無法走到為-1
//dis2紀錄node2能走到的點的距離,無法走到為-1
int cur1 = node1, cur2 = node2, times = 0;
//走訪node1能走到的所有點
while(cur1 != -1){//直到走到不能走(到-1)
if(dis1[cur1] == -1)//不重複走
dis1[cur1] = times++;
else break;
cur1 = edges[cur1];
}
times = 0;
//走訪node2能走到的所有點
while(cur2 != -1){
if(dis2[cur2] == -1)
dis2[cur2] = times++;
else break;
cur2 = edges[cur2];
}
int smallest = n, node = -1;
for(int i = 0;i <n;i++){
//如果這個點node1或node2走不到
if(dis1[i] ==-1 ||dis2[i] == -1)
continue;
if(smallest > max(dis1[i] , dis2[i]) ){
smallest = max(dis1[i] ,dis2[i]);
node = i;
}
}
return node;
}
};
```
## Date
### 2023/1/25