解题思路
从节点0出发到其余点之间的最少访问时间,由于两点之间的无向边就是以时间单位计量的,实际上就是求从节点0出发到其他节点的最短距离,可以用迪杰斯特拉算法,在计算过程中如果长度超过对应节点的消失时间,则-1.
Dijkstra算法
图的权重对Dijkstra算法必不可少。
Dijkstra算法可以寻找一个节点到所有其他节点的最短路。生成一个最短路径树。
GPS 设备使用这个算法来寻找当前位置到目标位置的最短路径。Dijkstra 算法被广泛应用在工业上,尤其是需要建模网络的领域。
如何描述图结构,通常用:
- 十字链表
- 二维矩阵
二维矩阵更加直观,是因为可以看到任意一个点到其他点的距离。所以用二维矩阵。
class Solution {
public:
vector<int> minimumTime(int n, vector<vector<int>>& edges, vector<int>& disappear) {
vector<vector<pair<int, int>>> adj(n);
for (const auto& edge : edges) {
int u = edge[0], v = edge[1], length = edge[2];
adj[u].emplace_back(v, length);
adj[v].emplace_back(u, length);
}
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
pq.emplace(0, 0);
vector<int> answer(n, -1);
answer[0] = 0;
while (!pq.empty()) {
auto [t, u] = pq.top();
pq.pop();
if (t != answer[u]) {
continue;
}
for (const auto& [v, length] : adj[u]) {
if (t + length < disappear[v] && (answer[v] == -1 || t + length < answer[v])) {
pq.emplace(t + length, v);
answer[v] = t + length;
}
}
}
return answer;
}
};
作者:力扣官方题解
链接:https://leetcode.cn/problems/minimum-time-to-visit-disappearing-nodes/solutions/2844219/fang-wen-xiao-shi-jie-dian-de-zui-shao-s-w9sv/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。