leetcode 789. Escape The Ghosts

You are playing a simplified Pacman game. You start at the point (0, 0), and your destination is (target[0], target[1]). There are several ghosts on the map, the i-th ghost starts at (ghosts[i][0], ghosts[i][1]).

Each turn, you and all ghosts simultaneously may move in one of 4 cardinal directions: north, east, west, or south, going from the previous point to a new point 1 unit of distance away.

You escape if and only if you can reach the target before any ghost reaches you (for any given moves the ghosts may take.) If you reach any square (including the target) at the same time as a ghost, it doesn't count as an escape.

Return True if and only if it is possible to escape.

Example 1:
Input: 
ghosts = [[1, 0], [0, 3]]
target = [0, 1]
Output: true
Explanation: 
You can directly reach the destination (0, 1) at time 1, while the ghosts located at (1, 0) or (0, 3) have no way to catch up with you.
Example 2:
Input: 
ghosts = [[1, 0]]
target = [2, 0]
Output: false
Explanation: 
You need to reach the destination (2, 0), but the ghost at (1, 0) lies between you and the destination.
Example 3:
Input: 
ghosts = [[2, 0]]
target = [1, 0]
Output: false
Explanation: 
The ghost can reach the target at the same time as you.

题目大意:你从起点坐标要到大目标坐标,但是一些怪物会拦截你。怪物可以原地不动也可以向四个方向走。问你能不能走到目标坐标。
思路:一开始没注意到怪物可以不动,一直在想bfs怎么解决这道题目...我愚蠢了。其实只要怪物比你晚到目标点,你就能胜利....

class Solution {
public:
    bool escapeGhosts(vector<vector<int>>& ghosts, vector<int>& target) {
        int dist=abs(target[0])+abs(target[1]);
        for(auto g:ghosts)
        {
            int d=abs(target[0]-g[0])+abs(target[1]-g[1]);
            if(d<=dist) return 0;
        }
        return 1;
    }
};
原文地址:https://www.cnblogs.com/pk28/p/8470237.html