逃避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