先假设没有障碍物(石头):
那么答案就是曼哈顿牛棚与湖之间的曼哈顿距离。
然后加入这个障碍物:
如果这个障碍物没有影响原路线,那么答案不变。
否则,会分两种情况:
1. 两个点在同一条竖线上,并且石头在它们中间。
2. 两个点在同一条横线上,并且石头在它们中间。
这两种情况就是要把答案加上2,因为要拐个弯。
#include <bits/stdc++.h>
using namespace std;
int main() {
int x1, y1, x2, y2, x3, y3;
char s[11];
for (int i = 0; i < 10; i++) {
cin >> s;
for (int j = 0; j < 10; j++) {
char c = s[j];
if (c == 'L') x1 = i, y1 = j;
else if (c == 'R') x2 = i, y2 = j;
else if (c == 'B') x3 = i, y3 = j;
}
}
//记录坐标完成
int res = abs(x1 - x3) + abs(y1 - y3); //求解如果没有障碍的时候需要的步数
if (x1 == x2 && x2 == x3 && (y2 - y1) * (y2 - y3) < 0 || y1 == y2 && y2 == y3 && (x2 - x1) * (x2 - x3) < 0) res += 2; //石头在两个地点之间,并且两个地点在同一条直线上。
printf("%d", res - 1);
return 0;
}
非常的清晰!
谢谢资瓷!