逃避C ++中的鬼魂

假设我们正在玩一个简化的吃豆子游戏。现在我们从点(0,0)开始,目标是(target [0],target [1])。映射上有几个幻影,此处第i个幻影始于(ghosts [i] [0],ghosts [i] [1])。在每个回合中,我们和所有幽灵同时(可能)沿4个基本方向之一移动-北,东,西或南,从最后一个点到距离为1单位的新点。当且仅当我们能够在任何鬼魂到达我们之前到达目标(对于鬼魂可能采取的任何给定动作),我们才能逃脱。如果我们与鬼魂同时到达任何正方形(包括目标),它就不会逃脱算是逃跑。因此,我们必须在可能的情况下返回True。

因此,如果输入像[[1,0],[0,3]],而目标是[0,1],则结果为true。这是因为我们可以在时间1直接到达目的地(0,1),而位于(1,0)或(0,3)的幽灵无法抓住我们。

为了解决这个问题,我们将遵循以下步骤-

  • 我:= |目标[1] | + |目标[0] |

  • x:= 0

  • 对于范围从0到幻影数组大小的i – 1

    • x:= | ghosts [i,0] –目标[0] | + | ghosts [i,1] –目标[1] |

    • 如果x <=我,则返回false

  • 返回真

让我们看下面的实现以更好地理解-

示例

#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