力扣2596. 检查骑士巡视方案

2023-11-14

题目描述:

骑士在一张 n x n 的棋盘上巡视。在 有效 的巡视方案中,骑士会从棋盘的 左上角 出发,并且访问棋盘上的每个格子 恰好一次 。

给你一个 n x n 的整数矩阵 grid ,由范围 [0, n * n - 1] 内的不同整数组成,其中 grid[row][col] 表示单元格 (row, col) 是骑士访问的第 grid[row][col] 个单元格。骑士的行动是从下标 0 开始的。

如果 grid 表示了骑士的有效巡视方案,返回 true;否则返回 false

注意,骑士行动时可以垂直移动两个格子且水平移动一个格子,或水平移动两个格子且垂直移动一个格子。下图展示了骑士从某个格子出发可能的八种行动路线。

示例 1:

输入:grid = [[0,11,16,5,20],[17,4,19,10,15],[12,1,8,21,6],[3,18,23,14,9],[24,13,2,7,22]]
输出:true
解释:grid 如上图所示,可以证明这是一个有效的巡视方案。

示例 2:

输入:grid = [[0,3,6],[5,8,1],[2,7,4]]
输出:false
解释:grid 如上图所示,考虑到骑士第 7 次行动后的位置,第 8 次行动是无效的。

提示:

  • n == grid.length == grid[i].length
  • 3 <= n <= 7
  • 0 <= grid[row][col] < n * n
  • grid 中的所有整数 互不相同

思路:

马走日变了一下。

这个题很明显就是dfs,假设当前点是grid[x][y]=1,就看当前坐标x,y可以走的下一个坐标的grid值是否为grid[x][y]+1,如果不能那就返回false.

怎么走呢?

可以用两个数组分别表示行和列的偏移量,其实也就是矢量相加减,一共有八个方向可以走,类似于象棋里的马走日。

需要注意的就是,题目说了骑士从grid[row][col]=0的位置开始走,而且,这个位置一定是在左上角。

特判一下grid[0][0]是否为0就可以了。

其实我觉得这里题目给的这提示有点怪怪的,而且,这一点题目居然卡在最后几个样例,明显就是坑人的。

好吧,总的来说这道题还是非常简单的,最普通的dfs了,对dfs了解不是很多的同学可以去做做马走日这道题,一道非常经典的题目。

代码:

public:
    //分别给出行和列的偏移量,代表八个方向
    int dx[8]={-1,-2,-2,-1,1,2,2,1};
    int dy[8]={-2,-1,1,2,2,1,-1,-2};
    bool dfs(int x,int y,vector<vector<int>>& grid,int u,int n){// u表示当前坐标的grid值,n表示目标值
        if(u==n){//达到目标就返回true
            return true;
        }
       for(int i=0;i<8;i++){//遍历八个方向
           int a=dx[i]+x;
           int b=y+dy[i];
           if(a>=0&&a<grid.size()&&b>=0&&b<grid.size()&&grid[a][b]==u+1){//a,b这个点可以走,且符合题意
               if(dfs(a,b,grid,u+1,n)){
                   return true;
               }else{
                   return false;
               }
           }
       }
       return false;
    }
    bool checkValidGrid(vector<vector<int>>& grid) {
        if(grid[0][0]!=0)return false;
        int sz=grid.size();
        for(int i=0;i<sz;i++){
            for(int j=0;j<sz;j++){
                if(grid[i][j]==0){
                     if(dfs(i,j,grid,0,sz*sz-1)){//找到出发点
                      return true;
                    }else{
                        return false;
                    }
                }
            }
        }
       
       
        return false;
    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

力扣2596. 检查骑士巡视方案 的相关文章

随机推荐

  • JeeSite快速开发平台 JNPF快速开发平台3.4.6版本 框架源码部署文档入门说明

    JeeSite快速开发平台 JeeSite 快速开发平台 不仅仅是一个后台开发框架 它是一个企业级快速开发解决方案 后端基于经典组合 Spring Boot Shiro MyBatis 前端采用 Beetl Bootstrap AdminL
  • x264编码h264

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 x264介绍 二 x264中主要的编码接口以及主要数据结构介绍 1 void x264 param default x264 param t 2 int
  • 发现一个好用的层级多项目管理工具

    市面上项目管理工具蛮多的 但大多仅支持单层多项目管理 而我们公司有多条产品线 如果没有层级组织用于分类 使用起来就非常麻烦 最近 我们试用了下Topo项目管理软件 它可以根据我们的组织架构进行层级搭建 实际使用效果不错 看图 进系统 进设置
  • 【Linux】网络编程套接字(下)

    Linux 博客主页 一起去看日落吗 分享博主的在Linux中学习到的知识和遇到的问题 博主的能力有限 出现错误希望大家不吝赐教 分享给大家一句我很喜欢的话 看似不起波澜的日复一日 一定会在某一天让你看见坚持的意义 祝我们都能在鸡零狗碎里找
  • 第八天字符串

    344 反转字符串 力扣题目链接 opens new window 编写一个函数 其作用是将输入的字符串反转过来 输入字符串以字符数组 char 的形式给出 不要给另外的数组分配额外的空间 你必须原地修改输入数组 使用 O 1 的额外空间解
  • 基于单片机超声波测距语音播放

    一 系统方案 本设计采用52单片机作为主控器 HC SR04测距 液晶1602显示 按键设置报警阀值 语音报警 二 硬件设计 原理图如下 三 单片机软件设计 1 首先是系统初始化 uint dist 保存超声波模块测量到的结果 Trig P
  • pandas 数据导出

    1 导出到csv文件 1 1 DataFrame数据导出 index 0 忽略索引 header 0 忽略表头 mode a 可追加 df to csv data output path index 0 header 0 sep t flo
  • 循环控制结构小题1

    include
  • mapbox-gl支持多种坐标系

    文章目录 前言 效果 总结 前言 mapbox默认的投影是3857 但是实际应用中我们经常会使用高德 百度 天地图的服务 原生mapbox是不支持的 需要我们修改源码以支持以上坐标系 参考 支持百度 高德坐标系 mapboxgl 纠偏百度地
  • vue 项目中 zip 压缩包文件下载

    vue 项目中 zip 压缩包文件下载 参考文章 胡新fa 文件下载流程 参考文章 Mr 裴 压缩包下载打不开问题 參考文章 sqwu 注意 一定要在接口中配置 responseType blob 该属性 headers 根据需求添加 re
  • URL 地址栏锚点 window location hash 使用方法

    location是javascript里边管理地址栏的内置对象 比如location href就管理页面的url 用location href url就可以直接将页面重定向url 本文转自米扑博客 URL 地址栏锚点 window loca
  • ULN2003芯片控制直流电机学习

    ULN2003 双极型线性集成电路 达林顿晶体管阵列 ULN2003是一个单片高电压 高电流的达林顿晶体管阵列集成 电路 它是由7对NPN达林顿管组成的 它的高电压输出特性和阴 极箝位二极管可以转换感应负载 单个达林顿对的集电极电流是 50
  • pyspark_自定义udf_解析json列【附代码】

    pyspark 自定义udf 解析json列 附代码 一 背景 二 调研方案 三 利用Pyspark udf自定义函数实现大数据并行计算 整体流程 案例代码运行结果 案例代码 代码地址 代码 一 背景 车联网数据有很多车的时序数据 现有一套
  • GITHUB实用有趣工具推荐

    1 algorithm visualizer 一个交互式的在线可视化学习算法平台 能在可视化区域看到每行代码执行对应的操作 并且有对应的动画呈现 使你更加容易理解算法 2 pcottle learnGitBranching 一个在线可视化交
  • python能做什么毕业设计-有没有适合python做的毕设题目,现在不知道做什么了?...

    对于这个问题有三个解决方案 1 自己开发 2 借助开源项目 3 付费开发 结合自身的能力和需求 大家可以自行寻找合适的解决方案 1 自己开发 难度 高 实用性 低 价格 免费 Python 是一门非常好入门的语言 普通人跟着一门教程认真学
  • jenkins部署 java项目到远程 windows服务器

    jenkins部署 java项目到远程 windows服务器 1 查看windows服务器是否有 ssh服务 cmd模式 输入 ssh 如果报错就去安装ssh 可以去下 openSSH 2 然后直接用自己的电脑就是客户端 用xshell 连
  • 79. Word Search

    Given a 2D board and a word find if the word exists in the grid The word can be constructed from letters of sequentially
  • 蓦然回首 灯火阑珊

    时间的沙漏沉淀着无法逃离的过往 记忆的双手总是拾起那些明媚的忧伤 雨声 划破伤痛的记忆 泪水 激起心中的波浪 你的一闪而过 让我记住这永恒的瞬间 你在我生命中留下不褪色的光芒 就如流星的坠落绚丽地点亮了整个星空 很幸运 就像是个命运的宠儿
  • Bootloader

    Bootloader 一段有下载和引导功能的程序 下载应用程序 引导使MCU运行在应用程序中 只在有更新请求或者APP无效的时候才会激活 APP和Bootloader都存在Flash中 Flash Driver用来擦除APP 下载临时存放在
  • 力扣2596. 检查骑士巡视方案

    题目描述 骑士在一张 n x n 的棋盘上巡视 在 有效 的巡视方案中 骑士会从棋盘的 左上角 出发 并且访问棋盘上的每个格子 恰好一次 给你一个 n x n 的整数矩阵 grid 由范围 0 n n 1 内的不同整数组成 其中 grid