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

(LeetCode 每日一题) 909. 蛇梯棋 (广度优先搜索bfs)

题目:909. 蛇梯棋

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
思路:广度优先搜索bfs+队列,时间复杂度0(6*n^2)。
细节看注释

C++版本:

class Solution {
public:int snakesAndLadders(vector<vector<int>>& board) {int n=board.size();// vis[i]:表示i是否遍历过,避免环,重复遍历vector<bool> vis(n*n+1,false);// 队列,记录当前可以到达的位置queue<int> q;//初始化q.push(1);vis[1]=true;//距离,即次数int dis=-1;//不为空,则遍历while(q.size()){dis++;// 遍历当前dis达到的所有位置int cnt=q.size();while(cnt--){int t=q.front();q.pop();// 到达目的地,退出if(t==n*n){return dis;}// 遍历当前位置t,可达的所有位置kfor(int k=t+1;k<=min(t+6,n*n);k++){// 预处理出k在数组中的下标// k-1是为了方便处理,0~n*n-1int x=(k-1)/n,y=(k-1)%n;if(x%2!=0){y=n-1-y;}x=n-1-x;// tg是这一步可达的位置int tg=board[x][y];//小于0,说明不能跳,可达的位置就是k了if(tg<0) tg=k;//没遍历过if(vis[tg]==false){q.push(tg);vis[tg]=true;}}}}// 不存在return -1;}
};

JAVA版本:

class Solution {public int snakesAndLadders(int[][] board) {int n=board.length;boolean[] vis=new boolean[n*n+1];Arrays.fill(vis,false);Queue<Integer> qu=new ArrayDeque<>();qu.add(1);vis[1]=true;int dis=-1;while(!qu.isEmpty()){dis++;int cnt=qu.size();while(cnt!=0){cnt--;int t=qu.poll();if(t==n*n) return dis;for(int k=t+1;k<=Math.min(t+6,n*n);k++){int x=(k-1)/n;int y=(k-1)%n;if(x%2==1){y=n-1-y;}x=n-1-x;int tg=board[x][y];if(tg<0) tg=k;if(!vis[tg]){qu.add(tg);vis[tg]=true;}}}}return -1;}
}

Go版本:

func snakesAndLadders(board [][]int) int {n:=len(board)vis:=make([]bool,n*n+1)q:=[]int{1}vis[1]=truedis:=-1for len(q)>0 {dis++qu:=qq=nilfor _,t:=range qu {if t==n*n {return dis}for k:=t+1;k<=min(t+6,n*n);k++ {x,y:=(k-1)/n,(k-1)%nif x%2==1 {y=n-1-y}x=n-1-xtg:=board[x][y]if tg<0 {tg=k}if vis[tg]==false {vis[tg]=true;q=append(q,tg)}}}}return -1;
}
http://www.xdnf.cn/news/10389.html

相关文章:

  • 电子电器架构 --- OTA测试用例分析(上)
  • 华为OD机试_2025 B卷_小明减肥(Python,100分)(附详细解题思路)
  • 最卸载器——Geek Uninstaller 使用指南
  • 设备健康管理的战略升维:用预测性维护重构企业竞争力
  • JDK21深度解密 Day 9:响应式编程模型重构
  • 性能优化 - 理论篇:CPU、内存、I/O诊断手段
  • 性能优化 - 理论篇:常见指标及切入点
  • 钉钉红包性能优化之路
  • Git入门到精通:30分钟掌握核心技巧
  • 第二章支线三 ·《CSS炼金术:动画与变换高级奥义》
  • C++文件和流基础
  • [蓝桥杯]春晚魔术【算法赛】
  • Socket编程之TCP套件字
  • 深 入 剖 析 单 链 表:从 原 理 到 实 战 应 用
  • day17 常见聚类算法
  • Linux 库制作与原理
  • DockerFile常用关键字指令
  • 用Slash将链接转为快捷方式
  • 深入理解交叉熵损失函数——全面推演各种形式
  • 学习STC51单片机22(芯片为STC89C52RCRC)
  • Python训练打卡Day38
  • CTFHub-RCE 命令注入-过滤运算符
  • 【Java开发日记】基于 Spring Cloud 的微服务架构分析
  • 训练中常见的运动强度分类
  • 多目标粒子群优化算法(MOPSO),用于解决无人机三维路径规划问题,Matlab代码实现
  • 用 Spring Boot 静态资源映射 vs 用 Nginx 提供静态文件服务总结
  • OldRoll复古胶片相机:穿越时光,定格经典
  • AI 的早期萌芽?用 Swift 演绎约翰·康威的「生命游戏」
  • kafka学习笔记(三、消费者Consumer使用教程——消费性能多线程提升思考)
  • AIGC学习笔记(8)——AI大模型开发工程师