https://leetcode-cn.com/problems/escape-the-ghosts/

你在进行一个简化版的吃豆人游戏。你从 (0, 0) 点开始出发,你的目的地是 (target[0], target[1]) 。地图上有一些阻碍者,第 i 个阻碍者从 (ghosts[i][0], ghosts[i][1]) 出发。

每一回合,你和阻碍者们*可以*同时向东,西,南,北四个方向移动,每次可以移动到距离原位置1个单位的新位置。

如果你可以在任何阻碍者抓住你之前到达目的地(阻碍者可以采取任意行动方式),则被视为逃脱成功。如果你和阻碍者同时到达了一个位置(包括目的地)都不算是逃脱成功。

当且仅当你有可能成功逃脱时,输出 True。

示例 1:
输入:
ghosts = [[1, 0], [0, 3]]
target = [0, 1]
输出:true
解释:
你可以直接一步到达目的地(0,1),在(1, 0)或者(0, 3)位置的阻碍者都不可能抓住你。
示例 2:
输入:
ghosts = [[1, 0]]
target = [2, 0]
输出:false
解释:
你需要走到位于(2, 0)的目的地,但是在(1, 0)的阻碍者位于你和目的地之间。
示例 3:
输入:
ghosts = [[2, 0]]
target = [1, 0]
输出:false
解释:
阻碍者可以和你同时达到目的地。

说明:

  • 所有的点的坐标值的绝对值 <= 10000
  • 阻碍者的数量不会超过 100

非常有趣

我的算法: 让人和鬼以起始点开始扩展,如果人无路可走,那么鬼胜利,如果人先找到,人胜利。有点模拟的意思。

class Solution {public:typedef struct{int x,y;} node;queue<node> g,p;int xx[4]= {0,0,1,-1};int yy[4]= {1,-1,0,0};node t,tar,t2;int n=0;int m=0;//int vist[10000][10000];set<int> iset;bool res=false,isstop=false;bool escapeGhosts(vector<vector<int>>& ghosts, vector<int>& target) {t.x=0+10000;t.y=0+10000;p.push(t);tar.x=target[0]+10000;n=max(n,tar.x);tar.y=target[1]+10000;m=max(m,tar.y);if(t.x==tar.x&&t.y==tar.y) return true;for(int i=0; i<ghosts.size(); i++){t.x=ghosts[i][0]+10000;t.y=ghosts[i][1]+10000;m=max(m,t.y);n=max(n,t.x);g.push(t);}n=n+10;m=m+10;while(p.size()&&!isstop){bfs(0); //ghostbfs(1); //people//cout<<p.size()<<endl;}return res;}void bfs(int flag){if(isstop) return;if(flag==0)  //ghost{int num=g.size();while(num--){t=g.front();g.pop();//cout<<t.x<<" "<<t.y<<endl;for(int i=0; i<4; i++){t2.x=t.x+xx[i];t2.y=t.y+yy[i];if(t2.x>=0&&t2.x<n&&t2.y>=0&&t2.y<m){if(t2.x==tar.x&&t2.y==tar.y){isstop=true; //老巢被占了}if(!iset.count(t2.x*m+t2.y)){g.push(t2);iset.insert(t2.x*m+t2.y);}}}}}else{int num=p.size();while(num--){t=p.front();p.pop();// cout<<t.x<<" "<<t.y<<endl;for(int i=0; i<4; i++){t2.x=t.x+xx[i];t2.y=t.y+yy[i];if(t2.x>=0&&t2.x<n&&t2.y>=0&&t2.y<m){if(t2.x==tar.x&&t2.y==tar.y){isstop=true;res=true;}if(!iset.count(t2.x*m+t2.y)){p.push(t2);iset.insert(t2.x*m+t2.y);}}}}}}
};

大牛的答案

画个抽象的示意图来解释下为神马直接比较距离即可 A表示起点 B表示鬼魂?的位置 目的地为C 如果鬼魂?要在中间拦截 AC上必须有一点D 使得AD = DB 通过三角不等式 AC = AD + DC = DB + DC >= BC 如果鬼魂可以拦截到 那么鬼魂?最好的做法就是在终点等着 而不是去中间拦截 上面假设选择的是最短路径 乱走的话 相信鬼魂?会笑的更开心

/****          C*         /  \*        /    \*       /      \*      /        \*     /   \D     \*    /      \     \*   /         \    \*  /            \   \* A               \*                     B** */
class Solution {public boolean escapeGhosts(int[][] ghosts, int[] target) {int max=100;int disMe,disTur;disMe=this.distance(new int[]{0,0},target);for(int i=0;i<ghosts.length&&i<max;i++){disTur=this.distance(ghosts[i],target);if(disTur<=disMe)return false;}return true;}private  int distance(int [] start,int [] target){return Math.abs(target[0]-start[0])+Math.abs(target[1]-start[1]);}
}

转自 https://leetcode-cn.com/problems/escape-the-ghosts/comments/

LeetCode----789. 逃脱阻碍者 规律和模拟相关推荐

  1. Leetcode 789.逃脱阻碍者

    Leetcode 789.逃脱阻碍者 你在进行一个简化版的吃豆人游戏.你从 [0, 0] 点开始出发,你的目的地是 target = [xtarget, ytarget] .地图上有一些阻碍者,以数组 ...

  2. leetcode 789. 逃脱阻碍者

    789. 逃脱阻碍者 你在进行一个简化版的吃豆人游戏.你从 [0, 0] 点开始出发,你的目的地是 target = [xtarget, ytarget] .地图上有一些阻碍者,以数组 ghosts ...

  3. Java实现 LeetCode 789 逃脱阻碍者(曼哈顿距离)

    789. 逃脱阻碍者 你在进行一个简化版的吃豆人游戏.你从 (0, 0) 点开始出发,你的目的地是 (target[0], target[1]) .地图上有一些阻碍者,第 i 个阻碍者从 (ghost ...

  4. Leetcode.789.逃脱阻碍者---贪心+数学

    789. 逃脱阻碍者 你在进行一个简化版的吃豆人游戏.你从 [0, 0] 点开始出发,你的目的地是 target = [xtarget, ytarget] .地图上有一些阻碍者,以数组 ghosts ...

  5. 【Leetcode】789. 逃脱阻碍者

    789. 逃脱阻碍者 题目描述 解题思路: 曼哈顿距离 题目描述 你在进行一个简化版的吃豆人游戏.你从 [0,0][0, 0][0,0] 点开始出发,你的目的地是 target=[xtarget,yt ...

  6. 789. 逃脱阻碍者

    789. 逃脱阻碍者 你在进行一个简化版的吃豆人游戏.你从 [0, 0] 点开始出发,你的目的地是 target = [xtarget, ytarget] .地图上有一些阻碍者,以数组 ghosts ...

  7. 789 逃脱阻碍者

    题目描述: 你在进行一个简化版的吃豆人游戏.你从 [0, 0] 点开始出发,你的目的地是 target = [xtarget, ytarget] .地图上有一些阻碍者,以数组 ghosts 给出,第 ...

  8. 力扣789——逃脱阻碍者(贪心)

    题目(中等) 你在进行一个简化版的吃豆人游戏.你从 [0, 0] 点开始出发,你的目的地是 target = [xtarget, ytarget] .地图上有一些阻碍者,以数组 ghosts 给出,第 ...

  9. LC-789. 逃脱阻碍者(脑筋急转弯)

    789. 逃脱阻碍者 难度中等104 你在进行一个简化版的吃豆人游戏.你从 [0, 0] 点开始出发,你的目的地是 target = [xtarget, ytarget] .地图上有一些阻碍者,以数组 ...

最新文章

  1. VM虚拟机报错:An error occurred during the file system check.
  2. 提取Windows用户密钥文件cachedump
  3. 009_Redis的事物
  4. java web 嵌套播放器_请教一下tableau如何嵌套进自己开发的javaweb 项目中,谢谢了...
  5. 利用 C# 中的 FileSystemWatcher 制作一个文件夹监控小工具
  6. 库存商品表html源码,JSP+Servlet+数据库的方式完成一个简易的库存商品管理系统...
  7. 详解java访问修饰符
  8. 每天进步一点点《ML - 感知机》
  9. L2-024. 部落-PAT团体程序设计天梯赛GPLT
  10. VBA实现数据库中的字段处理(下划线去掉,后面的字母变大写)之版本1.0。
  11. Android 打包keysotre文件
  12. JavaScript(3):JS和Html
  13. IDL | 实验二、IDL语法基础
  14. Android安全之Https中间人攻击漏洞
  15. 独家解读 | 2018 恶意机器流量报告
  16. python3.8零基础入门教程_正版 Python 3.8编程快速入门 针对wan全零基础入门的读者 采用*小化安装+极简代码的教学...
  17. 关于poi导出excel浏览器不下载的问题
  18. Android美化之全局透明背景
  19. js中的==和===
  20. ColorPicker一款安卓取色器,模仿ps取色板

热门文章

  1. 弘辽科技:拼多多商品限制推广多久解封?怎么申诉?
  2. Linux常用指令与操作
  3. 看电视剧《天道》一点感想 + 法兰克福美景Opencv聚类分析
  4. 玩一玩Greasemonkey--开发上手篇
  5. STM32移植STemwin
  6. 光遇显示服务器已满怎么办,sky光遇服务器已满怎么办_sky光遇服务器已满解决方法介绍-星芒手游网...
  7. 光纤通信工程-波分复用DWDM(十一)
  8. python出现warning_Python warning警告出现的原因及忽略方法
  9. R语言可视化——动态心型图
  10. matlab学习笔记-绘图