leetcode---1728. 猫和老鼠 II
题目描述:
一只猫和一只老鼠在玩一个叫做猫和老鼠的游戏。
它们所处的环境设定是一个 rows x cols 的方格 grid ,其中每个格子可能是一堵墙、一块地板、一位玩家(猫或者老鼠)或者食物。
玩家由字符 'C' (代表猫)和 'M' (代表老鼠)表示。
地板由字符 '.' 表示,玩家可以通过这个格子。
墙用字符 '#' 表示,玩家不能通过这个格子。
食物用字符 'F' 表示,玩家可以通过这个格子。
字符 'C' , 'M' 和 'F' 在 grid 中都只会出现一次。
猫和老鼠按照如下规则移动:
老鼠 先移动 ,然后两名玩家轮流移动。
每一次操作时,猫和老鼠可以跳到上下左右四个方向之一的格子,他们不能跳过墙也不能跳 出 grid 。
catJump 和 mouseJump 是猫和老鼠分别跳一次能到达的最远距离,它们也可以跳小于最大距离的长度。
它们可以停留在原地。
老鼠可以跳跃过猫的位置。
游戏有 4 种方式会结束:
如果猫跟老鼠处在相同的位置,那么猫获胜。
如果猫先到达食物,那么猫获胜。
如果老鼠先到达食物,那么老鼠获胜。
如果老鼠不能在 1000 次操作以内到达食物,那么猫获胜。
给你 rows x cols 的矩阵 grid 和两个整数 catJump 和 mouseJump ,双方都采取最优策略,如果老鼠获胜,那么请你返回 true ,否则返回 false 。
示例 1:
输入:grid = ["####F","#C...","M...."], catJump = 1, mouseJump = 2
输出:true
解释:猫无法抓到老鼠,也没法比老鼠先到达食物。
C++代码:
class Solution {
public:
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, -1, 0, 1};
vector<string> g;
int n, m, cat, mouse, food, catJump, mouseJump;
int f[70][70][210];
int dp(int C, int M, int step) {
if(C == food || step > 200 || M == C) return 0;
if(M == food) return 1;
if(f[C][M][step] != -1) return f[C][M][step];
int res = dp(C, M, step + 1);
if(step & 1) {
// 猫走
for(int i=0; i<4; i++) {
int x = C/m, y=C%m;
for(int j=1; j<=catJump; j++) {
int a = x + dx[i]*j, b = y + dy[i]*j;
if(a >= n || a < 0 || b >=m || b < 0 || g[a][b] == '#') break;
res &= dp(a*m+b, M, step+1);
}
}
} else {
// 鼠走
for(int i=0; i<4; i++) {
int x = M/m, y = M%m;
for(int j=1; j<=mouseJump; j++) {
int a = x + dx[i]*j, b = y + dy[i]*j;
if(a >= n || a < 0 || b >=m || b < 0 || g[a][b] == '#') break;
res |= dp(C, a*m+b, step + 1);
}
}
}
return f[C][M][step] = res;
}
bool canMouseWin(vector<string>& grid, int _catJump, int _mouseJump) {
memset(f, -1, sizeof f);
g = grid, n = g.size(), m = grid[0].size(), catJump = _catJump, mouseJump = _mouseJump;
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++){
if(g[i][j] == 'C') cat = i * m + j;
else if(g[i][j] == 'M') mouse = i * m + j;
else if(g[i][j] == 'F') food = i * m + j;
}
}
return dp(cat, mouse, 0);
}
};
leetcode---1728. 猫和老鼠 II相关推荐
- [H博弈论] lc1728. 猫和老鼠 II(博弈论+记忆化搜索+周赛224_4)
文章目录 1. 题目来源 2. 题目解析 1. 题目来源 链接:1728. 猫和老鼠 II 2. 题目解析 棋盘类博弈论问题大多数采用记忆化搜索来进行优化.有效的状态空间没那么多,大多数都 break ...
- 【暴力枚举】LeetCode 90. Subsets II
LeetCode 90. Subsets II solution1和2均是利用set的,3和4是不利用set的 Solution1:我的答案 迭代法 class Solution { public:v ...
- 【DFS】LeetCode 52. N-Queens II
LeetCode 52. N-Queens II Solution1:我的答案 教科书一样的回溯法 <程序员面试金典>中有一道一毛一样的题啊! class Solution { publi ...
- 【数字全排列】LeetCode 47. Permutations II
LeetCode 47. Permutations II Solution1:我的答案 笨蛋方法:和第46题的思路差不多,把vector换成了set就OK啦~~~ class Solution { p ...
- [LeetCode] Word Break II 拆分词句之二
[LeetCode] Word Break II 拆分词句之二 Given a string s and a dictionary of words dict, add spaces in s to ...
- LeetCode题解(1728):猫和老鼠II(Python)
题目:原题链接(困难) 标签:动态规划 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) – – 520ms (96.20%) Ans 2 (Python) Ans 3 (Pyth ...
- [LeetCode]Single Number II
今天室友推荐了一道LeetCode上面的练习题Single Number II,题目大概的意思是有一个整形的数组,里面只有一个数是出现一次的,其他的数都出现了三次,然后让把这个数找出来. 第一眼看到这 ...
- leetcode 90. 子集 II 思考分析
与本题相关联的题目解析: leetcode 78. 子集 思考分析 leetcode 40. 组合总和 II思考分析 题目 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集 ...
- leetcode Course Schedule II
题目连接 https://leetcode.com/problems/course-schedule-ii/ Course Schedule II Description There are a to ...
- LeetCode 47 全排列 II -- 回溯法
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/permutations-ii 题意: 给定一个可包含重复数字的序列 nums ,按任意顺序 返 ...
最新文章
- 深度盘点Python11个主流框架:Pandas、Django、Matplotlib、Numpy、PyTorch......
- java进城杀不死怎么办_linux – 如何杀死永不死的进程?
- swift_024(Swift 的构造过程)
- 数据中心网络架构 — 云数据中心网络 — 大二层网络技术
- mysql backlog_一次优化引发的血案
- Minimum Array
- 任何字符串indexOf(‘‘)返回都是0,数组indexOf(‘‘)返回是-1
- c语言字符串字节数函数,C语言字符,字符串,字节操作常用函数
- Visio中图进行任意区域进行颜色填充
- 谨防职业病 IT人士必不可少的四类食物
- ROS2的学习笔记(legacy)
- 数据科学包15-matplotlib详细介绍
- 微PE系统盘制作 / 重装系统
- Chrome启动参数大全
- 小程序 | 微信小程序布局左对齐自动换行
- java语言程序设计二级_计算机二级Java语言程序设计试题
- Python使用wordcloud做词云
- 【Proteus仿真】TLC5615输出256点正弦波(振幅可调)
- 机器人视觉系统分为哪几种,主要包括哪些关键技术?
- 【小程序源码】同名在线查询系统
热门文章
- 如何将WebRoot部署到tomcat中
- 皮尔森残差_残差与标准化残差
- JQuery插件之图片轮播插件–slideBox
- ElasticSearch(十二):Spring Data ElasticSearch 的使用(二)
- jenkins 国内插件源无效问题的解决方案
- 图纸打印什么时候用蓝图_为什么工程图纸都是蓝色的?是叫“蓝图”吗?
- WordPress防止自动压缩jpg图片
- html背景图怎么做成水印,如何制作出有水印feel的PPT背景图片
- iOS 去除字符串中的H5标签
- 脑电数据处理分析教程汇总(eeglab, mne-python)