用 C++ 逃避幽灵
假设我们正在玩一个简化的吃豆人游戏。现在我们从点 (0, 0) 开始,我们的目标是 (target[0], target[1])。地图上有几个幽灵,其中第 i 只幽灵从 (ghosts[i][0], ghosts[i][1]) 开始。在每一轮中,我们和所有幽灵同时(可能)向四个基本方向移动:北、东、西或南,从上一点移动到 1 个单位距离之外的新点。只在我们到达目标点,且在任何鬼到达我们之前(无论幽灵采取任何移动)的情况下,我们才能逃脱。如果我们和鬼同时到达任何方格(包括目标点),则不算逃脱。所以当有可能逃脱时,我们必须返回真。
所以,如果输入类似于 [[1,0], [0,3]],而目标是 [0,1],则结果将为真。这是因为我们可以直接在 1 时刻到达目标点 (0, 1),而位于 (1, 0) 或 (0, 3) 处的幽灵无法抓住我们。
为了解决这个问题,我们将按照以下步骤操作:
- me := |target[1]| + |target[0]|
- x := 0
- 在 0 到鬼数组大小 - 1 的范围内对 i 循环
- x := |ghosts[i,0] - target[0]| + |ghosts[i, 1] - target[1]|
- 如果 x <= me,则返回假
- 返回真
让我们看看下面的实现,以获得更好的理解 -
范例
#include <bits/stdc++.h> using namespace std; class Solution { public: bool escapeGhosts(vector<vector<int>>& ghosts, vector<int>& target) { int me = abs(target[1]) + abs(target[0]); int x = 0; for(int i = 0; i < ghosts.size(); i++){ x = abs(ghosts[i][0] - target[0]) + abs(ghosts[i][1] - target[1]); if(x <= me) return false; } return true; } }; main(){ vector<vector<int>> v1 = {{1,0}, {0,3}}; vector<int> v2 = {0,1}; Solution ob; cout << (ob.escapeGhosts(v1, v2)); }
输入
[[1,0],[0,3]] [0,1]
输出
1
广告