1091. 二进制矩阵中的最短路径
Posted 不吐西瓜籽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1091. 二进制矩阵中的最短路径相关的知识,希望对你有一定的参考价值。
算法记录
LeetCode 题目:
给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。
说明
一、题目
畅通路径的长度 是该路径途经的单元格总数。
二、分析
- 简单的没有任何其余判定的迷宫寻路问题.
- 根据题意可得到需要进行转移的状态一共有
8
种, 对应着需要移动的八个方向. - 需要定义一个访问的数组来记录当前点是否走过, 防止循环的进行寻找从而陷入到一个死循环中.
class Solution {
private int[][] direction = {{0,1},{0,-1},{1,0},{-1,0},{-1,-1},{1,1},{-1,1},{1,-1}};
public int shortestPathBinaryMatrix(int[][] grid) {
int m = grid.length;
if(grid[0][0] == 1 || grid[m-1][m-1] == 1) return -1;
Queue<Status> queue = new ArrayDeque();
int[][] visit = new int[m][m];
queue.add(new Status(0,0,1));
visit[0][0] = 1;
while(!queue.isEmpty()) {
Status status = queue.poll();
if(status.x == m - 1 && status.y == m - 1) return status.distance;
for(int i = 0; i < 8; i++) {
int x = status.x + direction[i][0];
int y = status.y + direction[i][1];
if(x < 0 || y < 0 || x >= m || y >= m) continue;
if(grid[x][y] == 1 || visit[x][y] == 1) continue;
visit[x][y] = 1;
queue.add(new Status(x,y,status.distance + 1));
}
}
return -1;
}
class Status{
int x;
int y;
int distance;
public Status(int x, int y, int distance) {
this.x = x;
this.y = y;
this.distance = distance;
}
}
}
总结
熟悉状态转移方法以及迷宫寻路的边界判断。
以上是关于1091. 二进制矩阵中的最短路径的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 1091 二进制矩阵中的最短路径问题[BFS 队列] HERODING的LeetCode之路