[程序员代码面试指南]数组和矩阵-求最短通路值(BFS)
题意
给二维矩阵 1、0组成,问从左上角到右下角的最短通路值。
题解
BFS基础。头节点入队;对队内每个节点判断、处理,符合条件的入队;到了终点节点返回。
相关知识
Queue为接口,LinkedList为该接口的一个实现。
代码
public class Main {
public static void main(String args[]) {
int m[][]= {{1,0,1,1,1},{1,0,1,0,1},{1,1,1,0,1},{0,0,0,0,1}};
int ans=minPathVal(m);
System.out.println(ans);
}
public static int minPathVal(int[][] m) {
if(m==null) {
return 0;
}
int[][] dis=new int[m.length][m[0].length];
dis[0][0]=1;
Queue<Integer> rQ=new LinkedList<>();//
Queue<Integer> cQ=new LinkedList<>();
rQ.add(0);
cQ.add(0);
int res=0;
int r;
int c;
int dx[]={0,0,-1,1};//
int dy[]= {-1,1,0,0};
while(!rQ.isEmpty()) {
r=rQ.poll();
c=cQ.poll();
if(r==m.length-1&&c==m[0].length-1) {
return dis[r][c];
}
for(int i=0;i<4;++i) {
int x=r+dx[i];
int y=c+dy[i];
if(check(x,y,m,dis)) {
dis[x][y]=dis[r][c]+1;
rQ.add(x);
cQ.add(y);
}
}
}
return res;
}
public static boolean check(int x,int y,int[][] m,int[][] dis) {
return x>=0&&x<m.length&&y>=0&&y<m[0].length&&m[x][y]==1&&dis[x][y]==0;
}
}
[程序员代码面试指南]数组和矩阵-求最短通路值(BFS)的更多相关文章
- [程序员代码面试指南]数组和矩阵问题-找到无序数组中最小的k个数(堆排序)
题目链接 https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf?tpId=13&tqId=11182&t ...
- [程序员代码面试指南]数组和矩阵-数组的partition调整
题目 补充问题:数组只含0,1,2,对数组排序,要求时间复杂度O(n),额外空间复杂度O(1) 题解 维护三个变量,l,idx,r.左区间[0,l],中间区间[l+1,idx],右区间[idx+1,r ...
- 程序员代码面试指南:IT名企算法与数据结构题目最优解
第1章栈和队列 1设计一个有getMin功能的栈(士★☆☆☆) 1由两个栈组成的队列(尉★★☆☆) 5如何仅用递归函数和栈操作逆序一个栈(尉★★☆☆) 8猫狗队列(士★☆☆☆)10用一个栈实现另一 ...
- 程序员代码面试指南 IT名企算法与数据结构题目最优解
原文链接 这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现.针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近200道真实出现过的经典代码面试题,帮 ...
- 《程序员代码面试指南》第一章 栈和队列 构造数组的MaxTree
题目 给出一个无重复元素的数组,构造此数组的MaxTree, java代码 /** * @Description: 构造数组的MaxTree * @Author: lizhouwei * @Creat ...
- 《程序员代码面试指南》第八章 数组和矩阵问题 数组的partition 调整
题目 数组的partition 调整 java代码 package com.lizhouwei.chapter8; /** * @Description: 数组的partition 调整 * @Aut ...
- 《程序员代码面试指南》第八章 数组和矩阵问题 打印N 个数组整体最大的Top K
题目 打印N 个数组整体最大的Top K java代码 package com.lizhouwei.chapter8; /** * @Description: 打印N 个数组整体最大的Top K * ...
- 《程序员代码面试指南》第八章 数组和矩阵问题 在数组中找到出现次数大于N/K 的数
题目 在数组中找到出现次数大于N/K 的数 java代码 package com.lizhouwei.chapter8; import java.util.ArrayList; import java ...
- 《程序员代码面试指南》第八章 数组和矩阵问题 找到无序数组中最小的k 个数
题目 找到无序数组中最小的k 个数 java代码 package com.lizhouwei.chapter8; /** * @Description: 找到无序数组中最小的k 个数 * @Autho ...
随机推荐
- 运放引脚悬空危害大,单片机PWM信号进入运放需要考虑避免运放引脚悬空
1 问题电路 在没有烧录程序时,单片机的PWM引脚无信号,导致运放的3脚悬空,从而导致运放输出3.5V电压,从二导致后面驱动电流非常大,容易对驱动器件造成损坏 2 改进电路 通过在单片机输出增加下拉电 ...
- Mybatis中List传值
Mybatis遇到List传值时常用方法. 1. List<E>,E为基本数据类型和String Mapper类文件: List<User> selectByIds(List& ...
- 转圈游戏C++
转圈游戏 问题描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置, ...
- (转)@Autowired(required=false)注入注意的问题
1.前言 在使用spring开发过程中,我们基本上都是使用@Autowired这个注解,用来注入已有的bean.但是有些时候,会注入失败.当我们加上参数(required=false)就能解决.今天整 ...
- C# 中生成随机数
生成1-100之间的随机数: new Random().Next(1, 100) 但是输出的结果是一样的,因为Random调用无参的构造函数其实调用的是 有参的构造函数,传递的 默认值: Enviro ...
- JavaScript学习系列博客_29_JavaScript arguments
arguments (封装实参的对象) 在调用函数时,浏览器每次都会传递进两个隐含的参数:1.函数的上下文对象 this2.封装实参的对象 arguments- arguments是一个类数组对象,它 ...
- 超详细的阿里字节Spring面试技术点总结(建议收藏)
前言 Spring作为现在最流行Java开发技术,其内部源码设计非常优秀. Spring这个词对于Java开发者想必不会陌生,可能你每天都在使用Spring,享受着Spring生态提供的服务.现在很多 ...
- Linux 资源监控与性能测试
综合管理 glances 系统情况监控 vmstat 能看到上下文切换,runnable进程个数,uninterrupted进程个数 磁盘IO iostat是磁盘级别监控,iotop进程级别监控,注意 ...
- k8s 辨析 port、NodePort、targetPort、containerPort 区别
刚接触 k8s 涉及到端口到内容较多,容易混淆,这里整理如下: 目录 nodePort port targetPort containerPort 参考文章 nodePort nodePort 提供了 ...
- html的鼠标双击,单击,移上,离开,事件捕捉,JavaScript
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...