C ++中访问所有点的最短时间

假设有一些点作为数组给出。我们必须找到访问所有地点的最短时间(以秒为单位)。有一些条件。

  • 一秒钟内,它可以垂直,水平和对角移动

  • 我们必须按照数组中出现的顺序访问这些点。

因此,如果点是[[(1,1),(3,4),(-1,0)],则输出将为7。如果我们检查最短路径的序列,则序列将为(1、1 ),(2、2),(3、3),(3、4),(2、3),(1、2),(0、1),(-1、0)

为了解决这个问题,我们将找到两个连续点的x坐标差的最大值和两个连续点的y坐标差的最大值。最大值将被加在一起。

示例

让我们看下面的实现以更好地理解-

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
      int minTimeToVisitAllPoints(vector<vector<int>>& p) {
         int ans = 0;
         int n = p.size();
         for(int i = 1; i < n; i++){
            ans += max(abs(p[i][0] - p[i-1][0]), abs(p[i][1] - p[i-1] [1]));
         }
         return ans;
      }
};
main(){
   Solution ob;
   vector<vector<int>> c = {{1,1},{3,4},{-1,0}};
   cout << ob.minTimeToVisitAllPoints(c);
}

输入值

[[1,1],[3,4],[-1,0]]

输出结果

7