用 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

更新於: 04-5-2020

274 次瀏覽

開啟你的 職業生涯

完成教程,獲得認證

開始吧
廣告
© . All rights reserved.