day-24 腐烂的橘子

在这里插入图片描述

思路:利用bfs的思想 首先利用bfs遍历值为2的橘子(遍历时1和2都可以走)结束后如果存在某个橘子未被访问过且值为1则返回-1 再利用bfs遍历值为2的橘子 每遍历一次 时间加1 注意不要立即将map的值变为2,可以通过一个缓存数组临时存放 这样即可确定腐烂时间

注意点:map=grid只是把指针给map map改变grid也会改变 map=new int[rows][cols]; map=grid map改变grid不会改变

code:

class Solution {public int dir[][]={{0,1},{0,-1},{1,0},{-1,0}};public int map[][];public int tmap[][];public boolean vis[][];public int cows;public int cols;public int num1=0;public int num2=0;public int orangesRotting(int[][] grid) {cows=grid.length;if(cows==0) return -1;cols=grid[0].length;map=new int[cows][cols];tmap=new int[cows][cols];for(int i=0;i<cows;i++){for(int j=0;j<cols;j++){map[i][j]=grid[i][j];tmap[i][j]=grid[i][j];}}vis=new boolean[cows][cols];int ans=0;for(int i=0;i<cows;i++){//判断是否存在不能腐烂的橘子for(int j=0;j<cols;j++){if(!vis[i][j]&&map[i][j]==2){istrue(i,j);}}}boolean flag=true;for(int i=0;i<cows;i++){for(int j=0;j<cols;j++){if(!vis[i][j]&&map[i][j]==1){flag=false;}}}if(flag==false)return -1;flag=true;while(flag){flag=false;for(int i=0;i<cows;i++){for(int j=0;j<cols;j++){if(map[i][j]==1){//还存在新鲜橘子flag=true;break;}}if(flag==true) break;}if(flag==false) break;//不存在新鲜橘子for(int i=0;i<cows;i++){for(int j=0;j<cols;j++){if(map[i][j]==2){bfs(i,j);}}}ans++;for(int i=0;i<cows;i++){for(int j=0;j<cols;j++){map[i][j]=tmap[i][j];}}}return ans;}public void bfs(int i,int j){for(int k=0;k<4;k++){int newi=i+dir[k][0];int newj=j+dir[k][1];if(0<=newi&&newi<cows&&0<=newj&&newj<cols&&tmap[newi][newj]==1){tmap[newi][newj]=2;//变为坏橘子}}}public void istrue(int i,int j){vis[i][j]=true;for(int k=0;k<4;k++){int newi=i+dir[k][0];int newj=j+dir[k][1];if(0<=newi&&newi<cows&&0<=newj&&newj<cols&&(map[newi][newj]==1||map[newi][newj]==2)&&!vis[newi][newj]){istrue(newi,newj);}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/755465.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS7使用Docker部署.net Webapi

1 准备WebApi项目 对于已存在的WebApi项目&#xff0c;需要添加Docker支持&#xff1b; 编码时&#xff0c;先设置好项目需要的端口号&#xff1a;program.cs中&#xff0c;app.Run("http://*:8000");设置端口为&#xff1a;8000在VS中&#xff0c;选中项目&#xf…

2024上半年软考报名3月18日已开启!报名流程来啦~

截止至3月15日11:00&#xff0c;河北、山东、西藏、兵团、云南、澳门、西安、陕西、辽宁、新疆、大连、青海、宁波公布了2024上半年软考报名时间。 不想一直盯着官网等报名&#xff0c;可以关注一波HCIE考证研究所&#xff0c;获得软考报名提醒哦&#xff01; 2024上半年软考…

作业:基于udp的tftp文件传输实例

#include <head.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <errno.h>#define PORT 69 //服务器绑定的端口号 #define IP "192.168.1.107" //服务器的IP地址int do_download(i…

使用JAXB生成XML的Java对象

文章目录 标题使用JAXB生成XML的Java对象根据xml生成xsd文件&#xff1a;下载trang.jar&#xff1a;使用trang.jar生成xml的xsd文件&#xff1a; 使用JAXB的xjc生成java对象&#xff1a; 标题使用JAXB生成XML的Java对象 根据xml生成xsd文件&#xff1a; 下载trang.jar&#x…

windows连接ssh/open ssh/FTP/远程打印工具

XShell工具集&#xff0c;可满足标题所列的需求&#xff0c;方便好用。 网址&#xff1a;https://www.xshell.com/zh/

如何在极狐GitLab Runner Job 添加域名host?

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 在极狐GitLab Runner Job 添加域名…

C 引用方式调用函数

通过引用传递方式&#xff0c;形参为指向实参地址的指针&#xff0c;当对形参的指向操作时&#xff0c;就相当于对实参本身进行的操作。 传递指针可以让多个函数访问指针所引用的对象&#xff0c;而不用把对象声明为全局可访问。 /* 函数定义 */ void swap(int *x, int *y) {…

MySQL进阶45讲【34】为什么临时表可以重名?

1 前言 在上一篇文章中&#xff0c;我们在优化join查询的时候使用到了临时表。当时&#xff0c;我们是这么用的&#xff1a; create temporary table temp_t like t1; alter table temp_t add index(b); insert into temp_t select * from t2 where b>1 and b<2000; se…

为什么我学了几天 STM32 感觉一脸茫然?

为什么我学了几天 STM32 感觉一脸茫然&#xff1f; 如果你只有C语言基础就马上学习STM32&#xff0c;你一定会有这些疑惑&#xff1a; 为什么有这么多没见过的API函数&#xff1f;没见过的变量&#xff08;寄存器&#xff09;名称&#xff1f; 为什么工程除了main.c&#xff…

机器人现有力控技术检索

文章目录 力控技术1 基本柔顺力控1.1 直接力控1.2 间接力控1.2.1 被动和主动柔顺控制1.2.2 混合力位控制1.2.3 阻抗&导纳力控1.2.3.1 原理1.2.3.2 区别和联系1.2.3.3 工程应用 1.2.4 阻抗力控1.2.5 导纳力控 2 先进力控2.1 自适应力控2.2 鲁棒力控2.3 学习力控 3 智能力控3…

深度学习神经网络训练环境配置以及演示

&#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致重复! 目录 1 NVIDIA Dr…

2024-3-18-C++day6作业

1>思维导图 2>试编程 要求: 封装一个动物的基类&#xff0c;类中有私有成员&#xff1a;姓名&#xff0c;颜色&#xff0c;指针成员年纪 再封装一个狗这样类&#xff0c;共有继承于动物类&#xff0c;自己拓展的私有成员有&#xff1a;指针成员&#xff1a;腿的个数&a…

为什么技术人员副业赚钱那么难?

公众号&#xff1a;小北技术圈。 34岁老程序员&#xff0c;长期探索副业项目&#xff0c;写过IDEA插件&#xff0c;搞过工具导航&#xff0c;做过出海网站&#xff0c;运营过自媒体。欢迎提前探索35岁程序员的第二赛道。 每周分享干货内容。寻找100个技术人员&#xff0c;聚在…

vue-router(v4.0) 基础2

路由跳转 核心代码 import { useRouter,useRoute } from vue-router; const $router useRouter() const $route useRoute() const toAbout () > {console.log($router)$router.push(/about/888) } 全部代码 常量路由 export const constantRoute [{path: /about/:id,co…

Java编程——赌数游戏

/** 赌数游戏提供三个1-6的随机数&#xff0c;作为掷骰子得到的点数。如果各个点数相同&#xff0c;则为豹子。如果三个骰子点数和&#xff0c;小于或等于9&#xff0c;则为“小”。如果三个骰子点数和&#xff0c;大于9&#xff0c;则为“大”。用户随机选择&#xff1a;押大…

Java开发从入门到精通(八):Java的面向对象编程OOP:封装、继承、多态

Java大数据开发和安全开发 &#xff08;一&#xff09;Java的封装1.1 什么是封装1.1.1 封装的设计规范1.1.2 代码层面如何控对象的成员公开或隐藏? 1.2 JavaBean(实体类)1.2.1创建实体类1.2.2 实体类有啥应用场景?1.2.3 实体类总结 1.3 继承1.3.1 继承的语法格式1.3.2 继承的…

Stompy:一款针对时间戳的Timestomp工具

关于Stompy Stompy是一款功能强大的时间戳管理工具&#xff0c;在该工具的帮助下&#xff0c;广大研究人员能够轻松对指定文件或目录的时间戳进行修改和操作。该工具基于PowerShell开发&#xff0c;并且支持对目标目录中的所有文件执行递归时间戳操作。 功能介绍 1、修改独立…

【问题记录】自定义Prometheus exporter收集数据,Prometheus显示收集到数据,grafana未显示数据出来

问题背景&#xff1a; 使用golang编写Prometheus exporter&#xff0c;获取指定API Url返回值中的data值&#xff0c;把它做为自定义指标。 1、exporter 500ms自动更新一次data值 2、Prometheus的Graph界面输入自定义指标可以查询到值的变化 3、自定义指标最小时间是ms级别&…

IDEA中的Project工程、Module模块的概念及创建导入

1、IDEA中的层级关系&#xff1a; project(工程) - module(模块) - package(包) - class(类)/接口具体的&#xff1a; 一个project中可以创建多个module一个module中可以创建多个package一个package中可以创建多个class/接口2、Project和Module的概念&#xff1a; 在 IntelliJ …

【渗透工具】Chrome配置BurpSuite代理教程

工具安装教程 【渗透工具】BurpSuite汉化无cmd框版安装教程 配置代理教程 1、配置Burp代理为127.0.0.1:8080 2、扩展商店添加插件switchyomega&#xff0c;修改服务器和端口为下图&#xff1a; 3、打开代理&#xff0c;选择刚才添加的代理 4、访问 http://burp/ &#xff0c…