题意:你从原点可以选择左右上线或者不动 到target目标,但是,其他随时地区会有一些ghosts到target目标等着你,如果ghosts在你之前或者和你一起到,那你就将失败;否则成功
思路:
(1)题目和密室逃脱游戏不同点在于所有位置都可以走,那么从原点到target之间的最短距离就可以确定;
(2)点到点之间的最短距离公式当然是直线最短,不过,这个棋盘是不能走直线的;则使用曼哈顿具体作为衡量点到点之间的距离;
(3)分别原点和ghosts到target之间的距离,当ghosts到target任意一条都比原点到target距离短的话,则逃跑失败,返回false
bool escapeGhosts(vector<vector<int>>& ghosts, vector<int>& target) {
//原点到target之间的距离;由于有负数,则需要使用abs
int mydist = std::abs(target[0]) + std::abs(target[1]);
for (int i = 0; i < ghosts.size(); i++) {
//ghosts到target之间的曼哈顿距离
int value = std::abs(ghosts[i][0] - target[0]) + std::abs(ghosts[i][1] - target[1]);
if (value <= mydist) {
return false;
}
}
return true;
}