leecode 1266-访问所有点的最小时间
解题思路:
虽然有点暴力,但结果总算是好的。
相邻两点之间需要的时间是:
分别求出横坐标与纵坐标的差值,因为时间,所以取绝对值。然后比较横坐标差值与纵坐标差值,如果横坐标比较大,则时间=纵坐标+(横坐标-纵坐标)。因为它
沿对角方向移动之后,还需要再移动相应的(横坐标-纵坐标)的距离才能到达;如果纵坐标比较大,则时间=横坐标+(纵坐标+横坐标)。如果横坐标与纵坐标相等,
则时间=横坐标差值或者纵坐标差值。
完整代码:
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
int main(){
int a,b;
vector<vector <int>> points;
int i,j,n;
cin>>n; //总共的点数
vector<int> p;
for(i=0; i<n; i++){
cin>>a; //输入x坐标
p.push_back(a);
cin>>b; //输入y坐标
p.push_back(b);
points.push_back(p);
p.clear();
}
int stime=0,time=0,timex=0,timey=0; //stime:总时间; timex:横坐标差 timey:纵坐标差
for(i=0; i<points.size()-1; i++){
timex=abs(points[i][0]-points[i+1][0]);
timey=abs(points[i][1]-points[i+1][1]);
if(timex>timey){
time=timey+(timex-timey);
}
if(timex<timey){
time=timex+(timey-timex);
}
if(timex==timey){
time=timex;
}
cout<<time<<endl;
stime+=time;
}
cout<<stime<<endl;
return stime;
}