【力扣每日一题】2023.9.13 检查骑士巡视方案

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

题目给我们一个n*n大小的矩阵,矩阵的元素表示骑士已经行动的次数,问我们骑士能不能按照矩阵里元素顺序来巡视整个矩阵。

骑士每次移动的方案有八种,类似于中国象棋里的马走日。

骑士在左右和上下两种方向之中,每次移动都是先移动一种方向两格,再移动另一个方向一格,那么每次移动的点是固定的八个点,因此我们只需要在这八个点中寻找元素等于当前所在格子的元素+1的位置,如果找不到,那么就表示骑士无法按照矩阵中的顺序去巡视。

我们使用递归去寻找每个点,题目有说一开始骑士在左上角,因此我们从左上角开始递归,我们不断按照上诉的过程递归,直到我们把矩阵中所有格子都走一遍了,也就是递归了n*n+1次,那么表示骑士可以按照矩阵的顺序去巡视,我们返回true即可。

代码:

cpp 复制代码
class Solution {
public:
    bool find(vector<vector<int>>&grid,int n,int i,int j,int index){
        if(index==n*n) return true;     //走完了整个棋盘
        if(i<0||j<0||i>=n||j>=n||grid[i][j]!=index) return false;
        //向八个方向试探
        if(find(grid,n,i+1,j+2,index+1)) return true;
        if(find(grid,n,i+1,j-2,index+1)) return true;
        if(find(grid,n,i+2,j+1,index+1)) return true;
        if(find(grid,n,i+2,j-1,index+1)) return true;
        if(find(grid,n,i-2,j+1,index+1)) return true;
        if(find(grid,n,i-2,j-1,index+1)) return true;
        if(find(grid,n,i-1,j+2,index+1)) return true;
        if(find(grid,n,i-1,j-2,index+1)) return true;
        return false;
    }
    bool checkValidGrid(vector<vector<int>>& grid) {
        return find(grid,grid.size(),0,0,0);
    }
};
相关推荐
通信小呆呆2 小时前
电子战抗干扰技术:当“不被干扰”成为一种系统
算法·通信·mimo·isac
老歌老听老掉牙2 小时前
案例 7:二维 Rosenbrock 函数最小值(香蕉函数)
c++·pso
笑容掩饰我的失落2 小时前
区块链从小白到精通(八):从零实现一个标准 ERC-20 代币(完整可运行代码)
算法·区块链·php·智能合约·哈希算法
Severus_black3 小时前
【C++初阶】Stack、Queue算法题大练兵!
c语言·c++·算法·stl
2601_967979125 小时前
机器学习必修课:经典算法与Python实战
python·算法·机器学习·实战·课程
程序猿打工仔5 小时前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
通信小呆呆6 小时前
电子战干扰技术:从“蛮力压制”到“精准欺骗”,再到“认知博弈”
算法·通信·isac
老师我太想进步了20266 小时前
【数据结构-6】算法美学之单链表(1)
数据结构·算法
xiaoye-duck7 小时前
《C++ 项目:手写大模型接入 SDK》DataManager数据管理模块:SQLite持久化存储
开发语言·数据库·c++·sqlite
希望我万事顺遂7 小时前
力扣hot100-滑动窗口最大值
数据结构·算法·leetcode