计算在网格中从原点到特定点的最短路径长度

[[1,1,0,1],
[1,0,1,0],
[1,1,1,1],
[1,0,1,1]]

题目描述:

1表示可以经过某个地方,求解从(0,0)位置到(tr,tc)位置的最短路径长度。

思路分析:

使用BFS思想从(0,0)点开始搜索,直到找到(tr,tc)。

代码:

public int minPathLength(int[][]grids,int tr,int tc){
int[][]direction={{1,0},{-1,0},{0,1},{0,-1}} //表示四个方向
int m=grids.length;
int n=grids[0].length;
int pathLength=0;
if(m==0||tr<0||tc<0)
return -1;
Queue<Pair<Integer,Integer>>queue=new LinkedList<>();//队列中存放每次访问到的点的坐标
queue.offer(new Pair<Integer,Integer>(0,0));
while(!queue.isEmpty()){
int size=queue.size(); //队列中是否有元素
pathLength++; //每循环一次,长度加一
while(size-->0){
Pair<Integer,Integer>cur=queue.poll();
int cr=cur.getKey(); //当前点的行坐标
int cc=cur.getValue(); //当前点的列坐标
grids[cr][cc]=0; //标记当前点已经访问过
for(int[]d:direction){
int nr=cr+d[0];
int nc=cc+d[1]; //下一个点的横纵坐标
if(nr<0||nr>=m||nc<0||nc>=n||grids[nr][nc]==0){
continue;
}
if(nr==tr&&nc==tc){
return pathLength;
}
queue.offer(new Pair<>(nr,nc));
}
}
}
return -1;
}

最新文章

  1. How to parse HTML page data in Windows Phone
  2. 使用github的使用,利用git shell命令行模式进行操作
  3. 求n个排序链表的交集
  4. 编写高质量JS代码的68个有效方法(九)
  5. 解决ios下的微信打开的页面背景音乐无法自动播放
  6. 开发资源列表【Worldsing分享】
  7. VSX规划Package文件
  8. jQuery.ajax() datatype:“json&quot; 转换失败
  9. C#中英文混合字符串过长截断
  10. &lt;PHP&gt;字符串处理代码
  11. SD/MMC卡初始化及读写流程
  12. network is unreachable 解决方案之一
  13. .NET Framework 各版本区别(简介)
  14. 实时监控、直播流、流媒体、视频网站开发方案流媒体服务器搭建及配置详解:使用nginx搭建rtmp直播、rtmp点播、,hls直播服务配置详解
  15. 笔记:XML-解析文档-XPath 定位信息
  16. Netty事件监听和处理(上)
  17. android studio设置代理更新
  18. 好用的一些 git 命令
  19. 从excel表中生成批量SQL,将数据录入到数据库中
  20. mybatis随笔五之Executor

热门文章

  1. SpringBoot路径映射
  2. 求大师点化,寻求大文件(最大20G左右)上传方案
  3. Java——super
  4. border、outline、boxshadow那些事
  5. Pap.er 模仿 - 第一天
  6. 箭头函数(Arrow Functions)
  7. 手机H5设计尺寸
  8. python的filter,reduce,map
  9. 嵌入式Linux文件系统知多少
  10. log4j.rootLogger作用域