尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

A.每日一题——1970. 你能穿过矩阵的最后一天

A.每日一题——1970. 你能穿过矩阵的最后一天
📅 发布时间:2026/7/22 9:27:46

题目链接:1970. 你能穿过矩阵的最后一天(困难)

算法原理:

解法:深搜DFS

方法一:反向dfs

13ms击败94.50%

时间复杂度O(mn)

①初始时网格全是水,从最后一天往回推,每天把一个水单元格变成陆地

②检查新恢复的陆地能否从第一行连接到最后一行(上下左右四个方向检查),首次满足时即代表是正向最后一次能走通的路径,其天数即为答案

方法二:正向dfs

5ms击败100.00%

时间复杂度O(mn)

①初始时网格全是陆地,从第一天开始推,每天把一个陆地单元格变成水

②检查水单元格能否从最左列连接到最右列(八个方向检查),首次满足时即代表是所有路径都被封死的时候,其前一天即为答案

③细节:因为题目的day并非封死之后的天数,而是首次封死的触发天,而这一天恰好是最后能过河的天,所以返回的不是day-1

Java代码:

class Solution { //方法一:反向dfs int[] dx=new int[]{0,0,1,-1}; int[] dy=new int[]{1,-1,0,0}; int m,n; public int latestDayToCross(int _m, int _n, int[][] cells) { m=_m;n=_n; //0=水,1=已恢复但未验证连通性的陆地,2=已恢复且有连通性的陆地 byte[][] state=new byte[m][n]; //从最后一天开始逐步恢复陆地 for(int day=cells.length-1;;day--){ //获取第day天被淹没的单元格,正确映射下标 int[] cell=cells[day]; int r=cell[0]-1; int c=cell[1]-1; //将该单元格恢复为陆地,待验证连通性 state[r][c]=1; //核心判断:新恢复的陆地能否连通第一行和最后一行 if(dfsup(r,c,state)&&dfsdown(r,c,state)) return day; } } //判断能否连通第一行 private boolean dfsup(int r,int c,byte[][] state){ //如果当前单元格本身就在第一行,直接返回 if(r==0) return true; //遍历四个方向,看能否连通上 for(int k=0;k<4;k++){ int x=r+dx[k],y=c+dy[k]; //坐标合法+邻域能连通上 if(x>=0&&x<m&&y>=0&&y<n&&state[x][y]==2) return true; } return false; } //判断能否连通最后一行 private boolean dfsdown(int r,int c,byte[][] state){ //本身就在最后一行,直接返回 if(r==m-1) return true; //标记当前单元格为能连通的单元格 state[r][c]=2; //遍历四个方向,递归检查连通性 for(int k=0;k<4;k++){ int x=r+dx[k],y=c+dy[k]; //保证坐标合法+邻域是待验证的陆地 if(x>=0&&x<m&&y>=0&&y<n&&state[x][y]==1) //如果邻域能连接最后一行,则当前单元格也能 if(dfsdown(x,y,state)) return true; } return false; } }
class Solution { //方法二:正向dfs int[] dx=new int[]{0,0,1,-1,1,1,-1,-1}; int[] dy=new int[]{1,-1,0,0,1,-1,1,-1}; int m,n; public int latestDayToCross(int _m, int _n, int[][] cells) { m=_m;n=_n; //0=陆地,1=未连通的水,2=已连通的水 byte[][] state=new byte[m][n]; //从第一天开始连通水 for(int day=0;;day++){ //获取第day天被淹没的单元格,正确映射下标 int[] cell=cells[day]; int r=cell[0]-1; int c=cell[1]-1; //将该单元格用水淹没,待验证连通性 state[r][c]=1; //核心判断:新水能否连接最左列和最右列 if(dfsleft(r,c,state)&&dfsright(r,c,state)) return day; } } //判断能否连通最左列 private boolean dfsleft(int r,int c,byte[][] state){ //如果当前单元格本身就在最左列,直接返回 if(c==0) return true; //遍历八个方向,看能否连通上 for(int k=0;k<8;k++){ int x=r+dx[k],y=c+dy[k]; //坐标合法+邻域能连通上 if(x>=0&&x<m&&y>=0&&y<n&&state[x][y]==2) return true; } return false; } //判断能否连通最右列 private boolean dfsright(int r,int c,byte[][] state){ //本身就在最后一行,直接返回 if(c==n-1) return true; //标记当前单元格为能连通的单元格 state[r][c]=2; //遍历八个方向,递归检查连通性 for(int k=0;k<8;k++){ int x=r+dx[k],y=c+dy[k]; //保证坐标合法+邻域是待验证的水 if(x>=0&&x<m&&y>=0&&y<n&&state[x][y]==1) //如果邻域能连接最右列,则当前单元格也能 if(dfsright(x,y,state)) return true; } return false; } }

相关新闻

  • 智能体系统与AUC评估:从二元决策到连续评分
  • Hadoop vs 数据仓库:大数据存储方案深度对比
  • 双层无纺布和薄膜香蕉袋制袋机大品牌

最新新闻

  • 2026 东莞市全域防水补漏哪家靠谱?覆盖 32 镇街园区的正规防水修缮品牌甄选指南.doc - 资讯在线
  • 海风、万人大合唱,和一条不能断的“通讯线“—— 乾元通多链路聚合设备在今夏青岛演唱会场次落地思考
  • 2026年贵阳有哪些高压铝电缆厂家可以选择? - 企业推荐官
  • Jeecg导出excel代码
  • 影视预告片制作全流程指南:从素材管理到输出规范
  • Codex AI编程工具:核心技能与高效应用指南

日新闻

  • AI云原生实战05-金融AI上云最难的不是技术,是“不出事“——TCE银行风控架构拆解
  • 2026年GEOSEO优化公司选型深度测评:五大硬核标准严选,这六家重塑搜索增长新格局 - 品牌前沿专家
  • **核验!2026年7月卡地亚香港**售后网点地址及服务电话公告 - 卡地亚服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号