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

(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.lryc.cn/news/2394832.html

相关文章:

  • PostgreSQL ERROR: out of shared memory处理
  • 生成https 证书步骤
  • 34、请求处理-【源码分析】-Model、Map原理
  • 设计模式——适配器设计模式(结构型)
  • 小黑大语言模型通过设计demo进行应用探索:langchain中chain的简单理解demo
  • 秒杀系统—5.第二版升级优化的技术文档三
  • [SC]SystemC在CPU/GPU验证中的应用(六)
  • 【STM32】HAL库 之 CAN 开发指南
  • WPF的基础设施:XAML基础语法
  • DeepSeek R1-0528 新开源推理模型(免费且快速)
  • Go 语言的 GC 垃圾回收
  • [git每日一句]your branch is behind ‘origin/master‘
  • 【QT】在QT6中读取文件的方法
  • 安全帽目标检测
  • Java工厂方法模式详解
  • 【pytorch学习】土堆pytorch学习笔记2
  • Eclipse 插件开发 5.3 编辑器 监听输入
  • iOS 集成网易云信IM
  • Parasoft C++Test软件单元测试_实例讲解(对多次调用的函数打桩)
  • azure web app创建分步指南系列之二
  • 题海拾贝:P8598 [蓝桥杯 2013 省 AB] 错误票据
  • MySQL 8.0:解析
  • Python量化交易12——Tushare全面获取各种经济金融数据
  • 封装一个小程序选择器(可多选、单选、搜索)
  • Dest建筑能耗模拟仿真功能简介
  • 【Hot 100】121. 买卖股票的最佳时机
  • 【机器学习基础】机器学习入门核心算法:XGBoost 和 LightGBM
  • Linux | Shell脚本的常用命令
  • 跑步的强度等级分类
  • 【JUC】深入解析 JUC 并发编程:单例模式、懒汉模式、饿汉模式、及懒汉模式线程安全问题解析和使用 volatile 解决内存可见性问题与指令重排序问题