lintcode 1410 · 矩阵注水【BFS 中等 vip】

题目链接,描述

https://www.lintcode.com/problem/1410

java 复制代码
给一个二维矩阵,每个grid的值代表地势的高度。水流只会沿上下左右流动,且必须从地势高的地方流向地势低的地方。视为矩阵四面环水,现在从(R,C)处注水,问水能否流到矩阵外面去?



输入的矩阵大小为n x n ,n <= 200。
保证每个高度均为正整数。
样例
样例1

输入: 
mat =
[
    [10,18,13],
    [9,8,7],
    [1,2,3]
] and R = 1, C = 1
输出: "YES"
解释: 
(1,1) → (1,2)→ 流出。
样例2

输入: 
mat = 
[
    [10,18,13],
    [9,7,8],
    [1,11,3]
] and R = 1, C = 1
输出: "NO"
解释: 
从(1,1)无法流向任何其他格点,故无法流出去。

思路

前置知识:BFS,Queue

参考代码

java 复制代码
public class Solution {
    /**
     * @param matrix: the height matrix
     * @param r: the row of (R,C)
     * @param c: the columns of (R,C)
     * @return: Whether the water can flow outside
     */
    public String waterInjection(int[][] matrix, int r, int c) {
        //BFS
        int n = matrix.length,m=matrix[0].length;
        Queue<int[]> queue = new LinkedList<>();

        queue.add(new int[]{r,c});
        int[][] dirs = {{-1,0},{1,0},{0,-1},{0,1}};
        while (!queue.isEmpty()){
            int[] poll = queue.poll();
            int x = poll[0],y=poll[1];

            if(x ==0 || x ==n-1 || y ==0 || y==m-1)
                return "YES";

            for (int[] dir : dirs) {
                int x1 = x+dir[0],y1=y+dir[1];
                if(x1>=0 && x1<n && y1>=0 && y1<m && matrix[x][y] > matrix[x1][y1]){
                    queue.add(new int[]{x1,y1});
                }
            }
        }
        return "NO";
    }
}
相关推荐
在路上看风景7 小时前
2.3 矩阵的零空间
线性代数·矩阵
却话巴山夜雨时i8 小时前
74. 搜索二维矩阵【中等】
数据结构·算法·矩阵
simon_skywalker10 小时前
线性代数及其应用习题答案(中文版)第一章 线性代数中的线性方程组 1.4 矩阵方程Ax=b(1)
线性代数·机器学习·矩阵
oscar99911 小时前
线性代数 第二章 矩阵
线性代数·矩阵
懒麻蛇21 小时前
从矩阵相关到矩阵回归:曼特尔检验与 MRQAP
人工智能·线性代数·矩阵·数据挖掘·回归
ChoSeitaku1 天前
线代强化NO20|矩阵的相似与相似对角化|综合运用
线性代数·机器学习·矩阵
西西弗Sisyphus1 天前
矩阵的左乘和右乘有什么区别
线性代数·矩阵
西西弗Sisyphus1 天前
满秩分解是怎么把矩阵分解成了两个满秩的矩阵
线性代数·矩阵·初等矩阵·满秩分解
_OP_CHEN2 天前
算法基础篇:(十九)吃透 BFS!从原理到实战,解锁宽度优先搜索的核心玩法
算法·蓝桥杯·bfs·宽度优先·算法竞赛·acm/icpc
CoderYanger3 天前
优选算法-队列+宽搜(BFS):72.二叉树的最大宽度
java·开发语言·算法·leetcode·职场和发展·宽度优先·1024程序员节