[一天至少一题直到 ICPC 开赛 #012] 解题:2D Traveling(没发到12/21)

2D Traveling

昨天晚上的时候有写了,但忘记发出来

题目连结

在起点与终点找到离主城最近的距离(这里称作是a)

a 的求法 = 起点与最近的主城距离 + 终点与最近的主城之距离 (不可是相同的主城)

不通过主城最近的距离 ==> 起点与终点的直线距离

#include <iostream>#include <map>#include <vector>#include <algorithm>#include <cmath>#define ll long longusing namespace std;ll distance(ll x1, ll x2, ll y1, ll y2){    return abs(x1 - x2) + abs(y1 - y2);}int main(int argc, char const *argv[]){    ll t = 0;    cin >> t;    while (t--)    {        ll n, m, s, f;        cin >> n >> m >> s >> f;        vector<pair<int, int>> v(n + 1);        for (int i = 1; i <= n; i++)        {            cin >> v[i].first >> v[i].second;        }        ll d;        d = distance(v[s].first, v[f].first, v[s].second, v[f].second);        ll ans[2];        ans[0] = 1000000000000;        ans[1] = 1000000000000;        for (int i = 1; i <= m; i++)        {            ans[0] = min(ans[0], distance(v[i].first, v[s].first, v[i].second, v[s].second));            ans[1] = min(ans[1], distance(v[i].first, v[f].first, v[i].second, v[f].second));        }        ans[0] = min(ans[0] + ans[1], d);        cout << ans[0] << endl;    }    return 0;}

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章