用 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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP