【leetcode】矩阵中的距离
创始人
2024-01-25 04:55:40
0

0、 参考资料

BFS讲解

Leetcode官方题解

最短路径问题讲解

二、代码分析

这是属于多源最短路径问题,这种常见的求最短路径的问题常常来自于图相关的题目,比如常见的算法:

  • 单源最短路径——BFS算法、Dijkstra算法

  • 其中BFS算法(无权图)、Dijkstra算法(带权图,无权图)

  • 各顶点间的最短路径——Floyd算法(带权图、无权图)

由于BFS算法是求每一个点到所有点的单源最短路径,所以要求多元最短路径,我们反复调用对不同源点调用BFS即可求出,每个源点到不同节点的最短路径。

本题中,也是参考了这样的思路,但是与上述思路有一些区别。

对于矩阵中的 0,最近的 0 即为自身,因此 0到最近的 0 的距离是 0,只需要考虑每个 1 到最近的 0 的距离。

假设这个矩阵中恰好只有一个 0,我们应该怎么做?由于矩阵中只有一个 0,那么对于每一个 1,离它最近的 0 就是那个唯一的 0。如何求出这个距离呢?

我们可以从 0 的位置开始进行 广度优先搜索。广度优先搜索可以找到从起点到其余所有点的 最短距离,因此如果我们从 0 开始搜索,每次搜索到一个 1,就可以得到 0 到这个 1 的最短距离,也就离这个 1 最近的 0 的距离了(因为矩阵中只有一个 0)

那么如何处理多源问题呢 ?

我们在进行广度优先搜索的时候会使用到队列,在只有一个 0 的时候,我们在搜索前会把这个 0 的位置加入队列,才能开始进行搜索;如果有多个 0,我们只需要把这些 0 的位置都加入队列就行了。

实现方面有以下两点说明。

对于每个单元格需要向四个方向遍历,可以创建方向数组实现四个方向的遍历。

广度优先搜索需要记录每个单元格是否被访问过,这道题由于需要计算每个单元格到最近的 0的距离,因此可以根据结果数组中的元素判断每个单元格是否被访问过,不需要额外创建与矩阵相同的二维数组记录每个单元格是否被访问过。具体做法是,将矩阵中的每个 0 对应的结果数组中的元素初始化为 0,将矩阵中的每个 1 对应的结果数组中的元素初始化为无穷大,则结果数组中的值为无穷大的元素表示该单元格未访问。

三、代码题解

class Solution {static int[][] position = {{-1,0},{1,0},{0,1},{0,-1}};public int[][] updateMatrix(int[][] mat) {//题目属于图中的最短路径问题//初始化距离数组,与方向数组int m = mat.length;int n = mat[0].length;int [][] distances = new int[m][n];//初始化队列,把为零的节点装入队列,便于多源BFSQueue queue = new LinkedList();for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (mat[i][j] == 0) {queue.offer(new int[]{i, j});} else {//最大的距离长度distances[i][j] = 10001;}}}//开始BFS遍历数组while (!queue.isEmpty()) {int array[] = queue.poll();int x = array[0];int y = array[1];for (int []arr : position) {int newX = x + arr[0];int newY = y + arr[1];if (newX >= 0 && newX < m && newY >= 0 && newY < n && distances[newX][newY] == 10001) {queue.offer(new int[] {newX, newY});distances[newX][newY] = distances[x][y] + 1;}}}return distances;}
}

相关内容

热门资讯

如何培养和提升创业能力,创业能...                                                   ...
周文强演讲视频全集 周文强演讲...   大家好!我是夏歌      请你闭上眼睛听,认真听你心里的那个它,它在呼叫你,它在呼叫你,它在呼...
贵州创业补贴政策 贵州创业补贴...   00-1010贵阳贵安“建设人才强省”      贵州2022届高校毕业生就业创业行动启动仪式 ...
创业女性演讲,创新创业演讲比赛...   埃隆马斯克是当今世界的热门人物。他受到大家的追捧,不仅因为他是世界首富,更因为他对梦想的终极追求...
关于创业的话题,餐饮创业的理由...   坤宇餐饮公司,自成立以来,帮助无数人学习好手艺,成功开店创业,多年来深受好评。它已经来到这里,以...
vlog靠什么赚钱,vlog创...   随着近两年短视频平台的兴起,无论是个人还是机构都会想方设法在短视频网站上大放异彩,无论是明星还是...
冷饮创业计划书 冷饮创业计划书...   现在经济摊子太大,很多想创业的朋友都想下班后去做地摊赚零花钱。夏天天气炎热,冷饮成了大家最喜欢的...
为什么创业,创业如何选择 为什...         我是一个守财奴,很喜欢经济学。有句话说钱是万恶之源,这句话大错特错。钱本身没有好坏之...
女性丰胸 女性丰胸 女性写真图...   大家好,这里是ki健身,我是健身板块的渣渣KI。      今天要分享的问题是:女性经常去健身房...
值得一看的名人传记,名人创业事...   听说纯原创的公众号不超过7%,这是拂尘记的第534篇原创文章,字数1596,阅读大概需要5分钟 ...