当前位置: 首页 > article >正文

力扣1210. 穿过迷宫的最少移动次数

力扣1210. 穿过迷宫的最少移动次数

题目

在这里插入图片描述

题目解析及思路

题目要求找到最短的贪吃蛇到出口的路径,并且必须横着出去

就是比一般bfs多了一维,贪吃蛇当前水平还是竖直

代码

class Solution {
    static constexpr int dir[3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
public:
    int minimumMoves(vector<vector<int>>& grid) {
        int n = grid.size();
        queue<tuple<int,int,int>> q;
        q.emplace(0,0,0);
        vector<vector<vector<int>>> dis(n, vector<vector<int>>(n, vector<int>(2, INT_MAX)));
        dis[0][0][0] = 0;

        auto bfs = [&]()->void{
            while(!q.empty()){
                auto [x,y,s] = q.front();
                q.pop();
                for(int i=0;i<3;i++){
                    int sx = x + dir[i][0];
                    int sy = y + dir[i][1];
                    //更新状态
                    int ss = s ^ dir[i][2];
                    //求头的坐标
                    int hx = sx + ss;
                    int hy = sy + (ss ^ 1);
                    //头的位置是1、尾的位置是1、尾右下的位置是1,都不行
                    if(hx >= n || hy >= n || sx >= n || sy >= n || ss >= 2 || grid[hx][hy] == 1 || grid[sx][sy] == 1 || (i == 2 && grid[x+1][y+1] == 1)){
                        continue;
                    }
                    if(dis[sx][sy][ss] > dis[x][y][s] + 1){
                        dis[sx][sy][ss] = dis[x][y][s] + 1;
                        q.emplace(sx,sy,ss);
                    }
                }
            }
        };

        bfs();
        return dis[n-1][n-2][0] >= INT_MAX/2 ? -1 : dis[n-1][n-2][0];
    }
};

http://www.kler.cn/a/563789.html

相关文章:

  • 从0到一实现React Fiber从零到一实现React Fiber
  • 【ESP32S3接入讯飞在线语音识别】
  • 大语言加持的闭环端到端自动驾驶模型 学习笔记纯干货
  • 【C++设计模式】 单例设计模式:重要常用却并非完美之选
  • Cell:临床机器学习在癌症诊断、预后和治疗方面的进展
  • DIALOGPT:大规模生成式预训练用于对话响应生成
  • 奇安信率先使用DeepSeek落地金融行业了
  • ffmpeg avformat_open_input的作用
  • Java+SpringBoot+Vue+数据可视化的音乐推荐与可视化平台(程序+论文+讲解+安装+调试+售后)
  • 新版本的idea用不习惯,怎么还原为之前版本的UI界面?idea界面还原,idea新版本ui设置
  • Qt开发⑦Qt的窗口_上_菜单栏+工具栏+状态栏
  • 剖析IO原理和零拷贝机制
  • Pi-hole v6释出
  • 表单验证和正则表达式
  • js获取后端Long类型返回json时number类型精度丢失
  • 机器人替代人工上下料,已成为工业领域的必然趋势
  • 单细胞肿瘤细胞识别机器学习研究
  • 【Git 学习笔记_27】DIY 实战篇:利用 DeepSeek 实现 GitHub 的 GPG 密钥创建与配置
  • 深度学习笔记数学方面——矩阵计算,自动求导
  • Linux关机重启和登录注销