首页 > 编程语言 >每日一道算法题之宽度优先遍历之地图分析

每日一道算法题之宽度优先遍历之地图分析

时间:2024-12-18 19:21:31浏览次数:5  
标签:queue 遍历 int next 地图分析 ++ 算法 visited

image

class Solution {
    public int maxDistance(int[][] grid) {
        // 思路:宽度优先遍历。
        // 第一层有一个或者多个。单源+多源。
        // 遍历到每一层的时候,看当前层有多少个数,然后就操作多少次。

        int m = grid.length;
        int n = grid[0].length;
        boolean[][] visited = new boolean[m][n]; // 保存当前节点是否遍历过
        int[][] queue = new int[m * n][2]; // 队列
        int l = 0;
        int r = 0;
        int cnt_0 = 0; // 0的个数。
        // 把所有的1入队。
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (grid[i][j] == 1) {
                    queue[r][0] = i;
                    queue[r++][1] = j;
                    visited[i][j] = true;
                } else {
                    cnt_0++;
                }
            }
        }

        if (cnt_0 == 0 || cnt_0 == n * m) {
            // 全0或者没有0
            return -1;
        }

        int ans = 0;
        int[] next = new int[] { -1, 0, 1, 0, -1 }; // 四个方向移动

        while (l != r) {
            int cur_level = r - l;
            ans++;
            for (int k = 0; k < cur_level; k++) {
                int i = queue[l][0];
                int j = queue[l++][1];
                // 四个方向 入队

                for (int g = 0; g < 4; g++) {
                    int next_i = i + next[g];
                    int next_j = j + next[g + 1];
                    if (next_i >= 0 && next_i < m && next_j >= 0 && next_j < n && !visited[next_i][next_j]) {
                        queue[r][0] = next_i;
                        queue[r++][1] = next_j;
                        visited[next_i][next_j] = true;
                    }
                }
            }
        }
        return ans - 1;

    }
}

标签:queue,遍历,int,next,地图分析,++,算法,visited
From: https://www.cnblogs.com/clllll/p/18615719

相关文章

  • java 归并排序,原理、算法分析、实现细节、优缺点以及一些实际应用场景
    更多资源推荐:http://sj.ysok.net/jydoraemon提取码:JYAM实用优质资源/教程公众号【纪元A梦】###归并排序的详细解析探讨归并排序,包括其工作原理、算法分析、实现细节、优缺点以及一些实际应用场景。####1.基本概念归并排序是一种基于分治法的高效排序算法。它的基本思想是将......
  • Dijkstra单源最短路朴素算法(空间优化)
    Dijkstra单源最短路朴素算法(空间优化)基于使用邻接表存储连接边的方法,可以有效的降低空间复杂度在稀疏图(边的数量远小于顶点数量平方的图)中,邻接矩阵会大量占用无用的内存,导致Re,我们采用邻接表的办法,只存储存在的边,减少无关占用。相反,在稠密图(边的数量接近顶点数的平方的图)中,邻接......
  • 说说你对推荐算法的理解,它有哪些运用场景?你认为它的优缺点是什么?
    推荐算法是计算机专业中的一种重要算法,它通过一些数学方法,基于用户的历史行为数据和物品特征信息,推测出用户可能感兴趣的内容,并向用户进行推荐。这种算法在各个领域都有广泛的应用,以下是我对推荐算法的理解以及它的运用场景、优缺点的分析:一、理解推荐算法的核心思想是利用用户......
  • 【MATLAB源码-第248期】基于matlab的EMD算法+ICA算法轴承故障分析。
    操作环境:MATLAB2022a1、算法描述经验模态分解(EMD)与轴承故障识别EMD的基本原理EMD是一种自适应的信号分解技术,最初由Huang等人在1998年提出,旨在分析非线性和非平稳信号。传统的信号处理方法通常假设信号是线性和稳态的,但在实际工程应用中,许多信号,包括轴承振动信号,都......
  • 【MATLAB源码-第247期】基于matlab的秃鹰搜索优化算法(BES)无人机三维路径规划,输出做
    操作环境:MATLAB2022a1、算法描述秃鹰搜索优化算法(BaldEagleSearch,BES)是一种新颖的群体智能优化算法,受自然界中秃鹰猎食行为的启发而设计。与其他群体智能算法类似,BES试图通过模拟自然界的某些行为来解决复杂的优化问题。该算法的核心思想是通过模拟秃鹰在猎食过程中的......
  • 强化学习:softlearning 算法的官方实现 —— 源码阅读list(完成)
    softlearning原始项目:https://github.com/rail-berkeley/softlearning国内地址:https://openi.pcl.ac.cn/devilmaycry812839668/softlearning相关:强化学习:人形机器人——soft-q-leanring的官方实现的配置环境原始项目的运行环境已经打包成docker镜像,分布地址:https://g......
  • java 插入排序,原理、算法分析、实现细节、优缺点以及一些实际应用场景
    更多资源推荐:http://sj.ysok.net/jydoraemon提取码:JYAM实用优质资源/教程公众号【纪元A梦】 ###插入排序的详细解析探讨插入排序,包括其工作原理、算法分析、实现细节、优缺点以及一些实际应用场景。####1.基本概念插入排序是一种简单的排序算法,其核心思想是将数组分为已排......
  • 每日一道算法题之最小生成树之K算法
    最小生成树。有权无向图。把所有点连通起来的最小权重。k算法://Kruskal算法模版(洛谷)//静态空间实现//测试链接:https://www.luogu.com.cn/problem/P3366importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io......
  • Schreier–Sims 算法
    好看的实现。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintmaxn=105;intn,q;structperm{intp[maxn];};permoperator*(perma,permb){ permc; for(inti=1;i<=n;i++)c.p[i]=a.p[b.p[i]]; returnc;}perminv(perma){ p......
  • 数据结构与算法分析-Chapter1
    Chapter1-绪论1.1数据结构的基本概念1.数据(data)        主要包括数值型数据和非数值型数据。2.数据元素(dataelement)        描述数据的基本单位。可以由多个数据项(dataitem)组成。        数据项是具有独立含义的最小标识单位。例如描述......