搜索(BFS)---计算在网格中从原点到特定点的最短路径长度
2024-08-28 09:44:23
计算在网格中从原点到特定点的最短路径长度
[[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;
}
最新文章
- How to parse HTML page data in Windows Phone
- 使用github的使用,利用git shell命令行模式进行操作
- 求n个排序链表的交集
- 编写高质量JS代码的68个有效方法(九)
- 解决ios下的微信打开的页面背景音乐无法自动播放
- 开发资源列表【Worldsing分享】
- VSX规划Package文件
- jQuery.ajax() datatype:“json"; 转换失败
- C#中英文混合字符串过长截断
- <;PHP>;字符串处理代码
- SD/MMC卡初始化及读写流程
- network is unreachable 解决方案之一
- .NET Framework 各版本区别(简介)
- 实时监控、直播流、流媒体、视频网站开发方案流媒体服务器搭建及配置详解:使用nginx搭建rtmp直播、rtmp点播、,hls直播服务配置详解
- 笔记:XML-解析文档-XPath 定位信息
- Netty事件监听和处理(上)
- android studio设置代理更新
- 好用的一些 git 命令
- 从excel表中生成批量SQL,将数据录入到数据库中
- mybatis随笔五之Executor