P1639 [USACO18FEB] Teleportation B 题解
题意简述
给定起点 \(a\),终点 \(b\),以及可以互相直达的两点 \(x\)、\(y\)。求从 \(a\) 到 \(b\) 的最短路程。
思路简述
不难想到,从 \(a\) 点到 \(b\) 点一共有三种方式:
- 直接从 \(a\) 走到 \(b\)。路程为:\(\left| a - b \right|\)
- 从 \(a\) 走到 \(x\),传送到 \(y\),再从 \(y\) 走到 \(b\)。路程为:\(\left| a - x \right| + \left| y - b \right|\)
- 从 \(a\) 走到 \(y\),传送到 \(x\),再从 \(x\) 走到 \(b\)。路程为:\(\left| a - y \right| + \left| x - b \right|\)
直接按照三种方式模拟即可。
代码
#include <bits/stdc++.h>
using namespace std;
int a, b, x, y;
int main(){
cin >> a >> b >> x >> y;
cout << min(abs(x - a) + abs(y - b), min(abs(b - a), abs(x - b) + abs(y - a)));
return 0;
}

浙公网安备 33010602011771号